当我们希望将协议采用限制在类类型时,可以使用:class协议或@objc协议。
但是,与@objc协议相比,我看不到“类唯一协议”的优势。
我知道的不同之处:
@objc的空间效率更高。
@objc协议ProtocolObjC {} protocol ProtocolClass: class {} sizeof(ProtocolObjC) // -> 8 sizeof(ProtocolClass) // -> 16@objc协议
@objc协议ProtocolObjC {} ProtocolClass: class {} let obj:AnyObject = NSObject() obj是ProtocolObjC // -> false obj是ProtocolClass // <!错误:无法将“AnyObject”转换为非@objc协议类型“ProtocolClass”@objc协议
@objc协议ProtocolObjC {可选func ()} ProtocolClass:类{可选func () // <!错误:“可选”只能应用于@objc协议}的成员。那么,有什么用例我们应该使用: class协议吗?或者有人知道@objc的任何缺点
补充:谢谢安东尼奥!
enum MyEnum { case A,B,C }
@objc protocol ProtoObjC {
// Generics
typealias FooType
var foo:FooType {get set}
// Tuple
var bar:(Int,Int) {get set}
// Enum
var baz:MyEnum {get set}
}所有这些都会导致编译错误。
发布于 2014-12-11 11:39:17
我认为它们是两种不同的东西,不能互相比较。
我的经验法则是,除非需要objc兼容性,或者除非只需要通过@objc提供某种功能,否则应该始终使用本地的快速协议。
然而,使用快捷协议的优点是所有在objc中不可用的快速相关特性都可以使用,例如:
但不管怎么说,我还是会坚持用快捷的方式来选择纯粹的文体选择。
https://stackoverflow.com/questions/27421779
复制相似问题