正如我所知,结构是一种值类型,它将所有的字段存储在一个连续的内存段中,在编译时应该知道内存段的大小,所以,正如我所想,由于引用某个对象的大小是恒定的,编译这段代码应该没有问题:
struct Some {
weak var delegate: SomeDelegate?
}
protocol SomeDelegate {
...some functions...
}
所以struct 'Some'只有一个32位或64位的字段(我认为应该是这样的),但是swift编译器会对这几行代码发出一个错误消息:
“'weak'不能应用于非类绑定的'any SomeDelegate';考虑添加具有类绑定的协议一致性”当然,我可以使用泛型或关联类型完成此任务,但为什么“'weak'不能应用于非类绑定的'any SomeDelegate'”?
1条答案
按热度按时间mklgxw1f1#
如果使协议符合
AnyObject
,则可以将weak
与协议一起使用Weak(reference)只能用于引用类型。结构和枚举是值类型,类是引用类型。
这就是协议必须是仅类(
AnyObject
)协议的原因