swift 3。我想知道如何将 UICollectionViewDelegate
声明为弱属性。
如果你检查 swift 'headers',你会看到它继承自 UIScrollViewDelegate
,后者又继承自 NSObjectProtocol
,后者未标记为 class
-仅协议(protocol)。
如果我尝试使自己的协议(protocol)与委托(delegate)模式一起使用作为 weak
'delegate' 属性,我会得到编译时错误 'weak' may only be applied to class and class-bound协议(protocol)类型
。
虽然我理解为什么编译器会强制我使用 class
,但我想知道 UICollectionViewDelegate
是如何解决这个问题的。我猜想 class
是某种语法糖,但如果您能给我解释一下,我将不胜感激。
旁注:是否有一种模式可以处理我确实需要一种协议(protocol)的情况,该协议(protocol)可以被值和引用类型采用,但也可以从内存的角度“轻松”管理(意思是弱
引用)。
很抱歉问了一个有点模糊的问题。
最佳答案
当您在 protocol
定义中使用 class
关键字时,您是在说“此协议(protocol)仅适用于类,不适用于 Swift 结构或枚举”。
当一个对象继承自 Objective-C 类或协议(protocol),或者是一个 Objective-C 类或协议(protocol)时,根据定义,它不是 Swift 结构或枚举。所以它不需要指定。
关于 swift 。 UIKit 中委托(delegate)模式的协议(protocol)。 NSObject协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052660/