为什么我可以将@objc协议声明为弱属性,而不是swift协议?
我发现如果我创建了这样一个协议:为什么我可以将@objc协议声明为弱属性,而不是swift协议?,swift,protocols,weak-references,Swift,Protocols,Weak References,我发现如果我创建了这样一个协议: protocol MyProtocol { } 我不能这样做: weak var myVar: MyProtocol? 我找到了解决这个问题的方法,就是在协议声明中添加@objc: @objc protocol MyProtocol { } 但为什么这可以纠正错误呢 我的猜测是,添加@objc会阻止结构符合协议,因此变量的值需要是引用类型。我说得对吗 另外,添加@objc会阻止我添加像[String:Any]这样的swift类型。我还想知道是否有其他方法可
protocol MyProtocol { }
我不能这样做:
weak var myVar: MyProtocol?
我找到了解决这个问题的方法,就是在协议声明中添加@objc
:
@objc protocol MyProtocol { }
但为什么这可以纠正错误呢
我的猜测是,添加@objc
会阻止结构符合协议,因此变量的值需要是引用类型。我说得对吗
另外,添加
@objc
会阻止我添加像[String:Any]
这样的swift类型。我还想知道是否有其他方法可以修复错误。只能为引用类型(即实例)创建弱引用
类的,而不是值类型(结构或枚举)
如果将协议声明为“仅类协议”
然后可以声明该类型的弱变量:
weak var myVar: MyProtocol?
就你而言
@objc protocol MyProtocol { }
声明只能由NSObject
子类采用的协议
或者其他
@objc
类,因此这是一个隐式的纯类协议。所以我的猜测是正确的!我从来不知道@objc协议只能被NSObject子类采用!谢谢@Sweeper:严格来说,它可以被NSObject子类或其他@objc
类采用,但现在不要问我确切的区别:)
@objc protocol MyProtocol { }