我发现如果我创建了这样的协议:
protocol MyProtocol { }
我不能这样做:
weak var myVar: MyProtocol?
我找到了解决这个问题的方法,即在协议声明中添加@objc
:
@objc protocol MyProtocol { }
但为什么这可以修复错误?
我的猜测是添加@objc
会阻止结构符合协议,因此将变量的值设为参考类型。我是对的吗?
此外,添加@objc
会阻止我添加像[String: Any]
这样的快速类型。我还想知道是否有另一种修复错误的方法。
答案 0 :(得分:4)
只能为引用类型创建弱引用,即实例 一个类,而不是值类型(结构或枚举)。
如果您将协议声明为“仅限类协议”
protocol MyProtocol : class { }
然后您可以声明该类型的弱变量:
weak var myVar: MyProtocol?
在你的情况下
@objc protocol MyProtocol { }
声明一个只能由NSObject
子类采用的协议
或其他@objc
类,因此隐式只是一个类协议。