如果在协议扩展中定义协议,如何在协议上调用静态方法?

时间:2015-08-14 08:48:57

标签: swift protocols swift2 protocol-extension

protocol Car {
    static func foo() 
}

struct Truck : Car {

}

extension Car {
    static func foo() {
        print("bar")
    }
}

Car.foo() // Does not work  
// Error: Car does not have a member named foo

Truck.foo() // Works

Xcode正确地自动填充Car.foo(),所以我要问的是它是否是一个它没有编译的错误(说它没有一个名为foo()的成员)。如果在协议扩展中定义静态方法,可以直接在协议上调用静态方法吗?

2 个答案:

答案 0 :(得分:7)

Apple doc

  

协议实际上并不实现任何功能。   尽管如此,您创建的任何协议都将成为完全成熟的类型   用于您的代码。

因此,您不能直接调用协议的静态方法。

答案 1 :(得分:1)

不,错误信息不好,但它告诉你正确的事情。

以这种方式思考,你不能拥有

protocol Car {
    static func foo() {
        print("bar")
    }
}

这会编译错误“协议方法可能没有实体”。

协议扩展不会为不存在的协议添加功能。