声明符合Swift协议的变量或常量

时间:2014-06-06 00:06:26

标签: protocols swift

在Swift中,如何声明符合协议的变量(或常量)?

我试过

let whatever: protocol <myProtocol>

let whatever: myProtocol

但是在设置时我得到了错误

Cannot convert the expression's type '()' to type 'myProtocol'

2 个答案:

答案 0 :(得分:2)

没有必要这样做,因为当你声明你的变量(或常量)的类型时,应该知道它是否符合协议。但是,如果您有时使用遗留的objc id,则可能会获得AnyObject。在这种情况下,您可以进行向下转换,将其转换为协议类型并使用它。

let whatever: AnyObject = someObj
let conformProtocol = whatever as myProtocol

conformProtocol.callMethod()

或者您可能希望使用as?进行更安全的转换。

答案 1 :(得分:1)

From the docs

  

协议是命名类型,因此它们可以出现在代码中与其他命名类型相同的位置,如Protocols as Types中所述。但是,您无法构造协议实例,因为协议实际上并未为其指定的要求提供实现。