Swift。 UIKit 中委托模式的协议。 NSObject协议

Swift. Protocols for delegate pattern in UIKit. NSObjectProtocol

斯威夫特3。我想知道 UICollectionViewDelegate 究竟如何被声明为弱 属性.

如果你检查 swift 'headers' 你会看到它继承自 UIScrollViewDelegate 而后者又继承自 NSObjectProtocol 而未标记为 class -仅协议。

如果我尝试使自己的协议与委托模式一起使用 weak 'delegate' 属性 我会收到编译时错误 'weak' may only be applied to class and class-bound protocol types.

虽然我理解为什么编译器会强制我使用 class,但我想知道 UICollectionViewDelegate 是如何摆脱这个的。我想 class 是某种语法糖,但如果你能解释一下,我将不胜感激。

旁注:是否有一种模式可以处理我确实需要一种既可以被值类型也可以被引用类型采用但又 "easily" 从内存角度管理的协议的情况(意思是 weak 参考)。

对不起,我的问题有点模糊。

当您在 protocol 定义中使用 class 关键字时,您说的是 "this protocol only applies to classes, not Swift structs or enums."

当对象继承自 Objective-C class 或协议时,根据定义,它不是 Swift 结构或枚举。所以它不需要指定。