为什么必须将协议和快速协议中包含的可选功能都标记为@objc?

问题描述 投票:0回答:2

我在协议中声明可选功能时发现了一些不一致之处。在声明协议可选功能时,我必须将协议和可选功能都标记为@objc。然后,我查阅了UICollectionViewDataSource的文档,发现那里没有这样的要求来声明可选功能。

我已经尝试确认NSObjectProtocol,但是编译器仍然要求我将协议以及可选功能标记为@objc。有人可以启发我吗?

swift swift-protocols
2个回答
0
投票

如果要在协议中提供可选功能,则必须以这种方式声明@objc protocol MyOptionalProtocol { @objc optional func optionalFunction() }


0
投票

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

[在编写Swift时(而不是查看自动生成的标头),您需要告诉编译器它需要将某些东西桥接到ObjC,然后使用@objc进行。导入的ObjC不必桥接。

© www.soinside.com 2019 - 2024. All rights reserved.