Search code examples
swiftswift-protocolsdefault-implementation

How do you disambiguate between static methods from implemented protocols?


Casting works just fine for instance functions.

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()
    }
}

Solution

  • this should do the trick mate

    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()
        }
    }