考虑两个 Swift 协议(protocol):
@objc protocol SomeProtocol { }
protocol SomeOtherProtocol: NSObjectProtocol { }
声明 Swift 协议(protocol) @objc
或使其符合 NSObjectProtocol
有什么区别?我知道任何不包含 @objc
的协议(protocol)都不会桥接到 Objective-C,但是在纯 Swift 应用程序中这两个声明有什么区别?据我了解,@objc
应该通过顶级 SwiftObject
使 SomeProtocol
符合 NSObjectProtocol
。
最佳答案
有差异,但可能会有些细微差别。简而言之,@objc
为您提供了您不需要且不适用于结构的可选
。另一方面,NSObjectProtocol
本质上只是将实现限制为 NSObject
的子类。
将协议(protocol)注释为@objc
意味着它已注册到 Objective-C 运行时,允许协议(protocol)具有运行时特定的功能,即可选要求。这也意味着该协议(protocol)不能用在结构上,但它可以用在任何类上,同样,包含它的字典和数组可以桥接到 NSDictionary 和 NSArray。从纯 Swift 的角度来看,您可能没有理由需要这样做,因为该功能在很大程度上已被协议(protocol)扩展所取代。
另一方面,当协议(protocol)扩展 NSObjectProtocol
时,它仍然可以在结构上使用,但是该结构必须实现 所期望的所有方法>NSObjectProtocol
。这可能是一项艰巨的任务。从实际的角度来看,它实际上只是迫使您使实现 SomeOtherProtocol
的类成为链上某处的 NSObject
的子类。
关于objective-c - 在纯 Swift 中声明一个协议(protocol) @objc 和让它符合 NSObjectProtocol 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443212/