我在协议中声明可选功能时发现了一些不一致之处。在声明协议可选功能时,我必须将协议和可选功能都标记为@objc
。然后,我查阅了UICollectionViewDataSource的文档,发现那里没有这样的要求来声明可选功能。
我已经尝试确认NSObjectProtocol
,但是编译器仍然要求我将协议以及可选功能标记为@objc
。有人可以启发我吗?
如果要在协议中提供可选功能,则必须以这种方式声明@objc protocol MyOptionalProtocol {
@objc optional func optionalFunction()
}
UICollectionViewDataSource是从ObjC导入的。自动生成的Swift标头不会在每个元素上插入@objc
。这些标头通常是无效的Swift(例如,它们定义了没有实现的结构和类,这是无效的Swift)。
[在编写Swift时(而不是查看自动生成的标头),您需要告诉编译器它需要将某些东西桥接到ObjC,然后使用@objc
进行。导入的ObjC不必桥接。