swift - 为什么我必须将 swift 协议(protocol)中的协议(protocol)和包含的可选函数标记为 @objc?

标签 swift swift-protocols

我在协议(protocol)中声明可选函数时发现了一些不一致的地方。在声明协议(protocol)中的函数为可选时,我必须将协议(protocol)和可选函数都标记为 @objc。然后我查找了 UICollectionViewDataSource 的文档,发现那里没有声明可选函数的要求。

我已尝试确认NSObjectProtocol,但编译器仍然要求我将协议(protocol)以及可选函数标记为@objc。有人可以告诉我同样的事情吗?

最佳答案

UICollectionViewDataSource是从ObjC导入的。自动生成的 Swift header 不会在每个元素上插入 @objc。这些 header 通常是无效的 Swift(例如,它们定义没有实现的结构和类,这在 Swift 中是无效的)。

当您编写 Swift 时(而不是查看自动生成的 header ),您需要告诉编译器它需要将某些内容桥接到 ObjC,并且可以使用 @objc 来完成此操作。导入的 ObjC 不必桥接。

关于swift - 为什么我必须将 swift 协议(protocol)中的协议(protocol)和包含的可选函数标记为 @objc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57306570/

相关文章:

Swift MVVM - 使用协议(protocol)来处理 viewModel 事件

ios - 有没有一种方法可以通过其中一个单元格中的按钮刷新整个 UITableView?

ios - 从解析错误中删除信息

swift - Xcode GM : no swift language for OS X command line tool project?

ios - 如何使用 NSUserDefaults 设置 bool 值。预期声明错误

Swift 任何方法参数协议(protocol)一致性丢失

objective-c - 在 Objective-C 中获取属性对象的值

swift - 在 SwiftUI 中使用状态变量作为 func 的输入

swift - 如何将 Swift 协议(protocol)与泛型方法和泛型类型一起使用

协议(protocol) : operator '===' cannot be applied to operands of type '_' and 'Self.T' 中的 Swift 泛型