在Swift中,如何声明符合协议的变量(或常量)?
我试过
let whatever: protocol <myProtocol>
和
let whatever: myProtocol
但是在设置时我得到了错误
Cannot convert the expression's type '()' to type 'myProtocol'
答案 0 :(得分:2)
没有必要这样做,因为当你声明你的变量(或常量)的类型时,应该知道它是否符合协议。但是,如果您有时使用遗留的objc id,则可能会获得AnyObject
。在这种情况下,您可以进行向下转换,将其转换为协议类型并使用它。
let whatever: AnyObject = someObj
let conformProtocol = whatever as myProtocol
conformProtocol.callMethod()
或者您可能希望使用as?
进行更安全的转换。
答案 1 :(得分:1)
协议是命名类型,因此它们可以出现在代码中与其他命名类型相同的位置,如Protocols as Types中所述。但是,您无法构造协议实例,因为协议实际上并未为其指定的要求提供实现。