JAL*_*JAL 7 objective-c objective-c-runtime nsobject swift swift-protocols
考虑两个Swift协议:
@objc protocol SomeProtocol { }
protocol SomeOtherProtocol: NSObjectProtocol { }
Run Code Online (Sandbox Code Playgroud)
声明Swift协议@objc或符合它的区别是什么NSObjectProtocol?我知道任何协议@objc都不会被桥接到Objective-C,但纯Swift应用程序中这两个声明之间的区别是什么?据我了解,@objc应符合SomeProtocol以NSObjectProtocol通过顶层SwiftObject.
存在差异,但它们可能有点细微差别.简而言之,@objc为您optional提供您不应该使用的结构,而不使用结构. NSObjectProtocol另一方面,实质上只是将实现约束为子类NSObject.
将协议注释为@objc表示它已在Objective-C运行时注册,允许协议具有运行时特定功能,即可选要求.它还意味着协议不能在结构上使用,但它可以在任何类上使用,同样字典和包含它的数组可以桥接到NSDictionary和NSArray.从纯粹的快速角度来看,您可能没有理由需要这样做,因为该功能在很大程度上已经被协议扩展所取代.
NSObjectProtocol另一方面,当协议扩展时,它仍然可以在结构上使用,但该结构必须实现所需的所有方法NSObjectProtocol.这可能是一项艰巨的任务.从实际的角度来看,它实际上只是迫使你使类实现SomeOtherProtocol成为NSObject链上某个地方的子类.
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |