您如何区分已实现协议的静态方法?
Posted
技术标签:
【中文标题】您如何区分已实现协议的静态方法?【英文标题】:How do you disambiguate between static methods from implemented protocols? 【发布时间】:2015-10-12 17:51:12 【问题描述】:对于实例函数,强制转换工作得很好。
protocol Protocol1
extension Protocol1
func instanceFunc()
static func staticFunc()
protocol Protocol2
extension Protocol2
func instanceFunc()
static func staticFunc()
struct Struct: Protocol1, Protocol2
func instanceFunc()
(self as Protocol1).instanceFunc()
(self as Protocol2).instanceFunc()
static func staticFunc()
// My best guess. Nope!
(Struct as Protocol1.Type).staticFunc()
(Struct as Protocol2.Type).staticFunc()
【问题讨论】:
见***.com/questions/31586864/… 我知道,除了协议是否代表对象的接口,还是代表对象的某种个性,协议还有身份危机,但考虑到个性可以手动选择,例如函数,对于静态的任何东西都应该是一样的。 我认为您错过了 Struct 不是对象的事实,但您正试图像它一样进行投射。在预期类型名称之后,您是否收到类似构造函数调用的错误? 我不想像任何东西一样投射实例。我在猜测做我想做的事情的语法可能是什么。 我的意思是你不需要强制转换你只需调用 Protocol1.staticFunc() 和 Protocol2.staticFunc() 因为它不是一个对象,它们是附加到类的静态函数。 【参考方案1】:这应该可以解决问题
protocol Protocol1
extension Protocol1
func instanceFunc()
static func staticFunc()
protocol Protocol2
extension Protocol2
func instanceFunc()
static func staticFunc()
struct Struct: Protocol1, Protocol2
func instanceFunc()
(self as Protocol1).instanceFunc()
(self as Protocol2).instanceFunc()
static func staticFunc()
(Struct.self as Protocol1.Type).staticFunc()
(Struct.self as Protocol2.Type).staticFunc()
【讨论】:
我可以发誓我已经尝试过了;可能不会!做得好!你是谁?我想关注你的进展。 很高兴我能帮上忙!不过,恐怕没有什么可遵循的,我只是想帮助这里的人们,偶尔也会在 swift 的 subreddit 上帮助他们。如果您需要什么,请给我发私信。以上是关于您如何区分已实现协议的静态方法?的主要内容,如果未能解决你的问题,请参考以下文章
Js类的静态方法与实例方法区分以及jQuery如何拓展两种方法