swift 。 UIKit 中委托(delegate)模式的协议(protocol)。 NSObject协议(protocol)

标签 swift swift-protocols

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/

相关文章:

swift - 如何在其实现中替换 self

swift - 将 self 作为参数传递给需要与 self 相同类型作为参数的协议(protocol)函数

ios - 没有泛型约束的协议(protocol)中的泛型数组

swift - 设置自定义 NSView 的 backgroundColor

ios - 从弹出通知中以编程方式打开 Wifi 设置

swift - 如何使 Cell 在 SWIFT 中可点击,就像在 iPhone 中的最近通话一样?

Swift2 协议(protocol)扩展 NSObjectProtocol

ios - 在 MFMailComposeViewController 中将“发送和取消”按钮设置为白色背景上的白色以外的其他内容

ios - 无法在不同的 iPhone 设备上放置围绕 imageView 的圆形层

swift - 只能通过使用最终类来满足的 Swift 协议(protocol)要求