您如何区分已实现协议的静态方法?

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如何拓展两种方法

关于伪静态的实现方法

静态方法与实例方法的区分

可以注册仅静态协议吗?

GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )

MFC中静态成员函数调用其他类的非静态变量