首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候应该使用类协议rathar而不是@objc?

什么时候应该使用类协议rathar而不是@objc?
EN

Stack Overflow用户
提问于 2014-12-11 11:28:15
回答 1查看 279关注 0票数 2

当我们希望将协议采用限制在类类型时,可以使用:class协议或@objc协议。

但是,与@objc协议相比,我看不到“类唯一协议”的优势。

我知道的不同之处:

  1. 尺寸 @objc的空间效率更高。 @objc协议ProtocolObjC {} protocol ProtocolClass: class {} sizeof(ProtocolObjC) // -> 8 sizeof(ProtocolClass) // -> 16
  2. 协议一致性的校验 只适用于@objc协议 @objc协议ProtocolObjC {} ProtocolClass: class {} let obj:AnyObject = NSObject() obj是ProtocolObjC // -> false obj是ProtocolClass // <!错误:无法将“AnyObject”转换为非@objc协议类型“ProtocolClass”
  3. 任择议定书要求 只适用于@objc协议 @objc协议ProtocolObjC {可选func ()} ProtocolClass:类{可选func () // <!错误:“可选”只能应用于@objc协议}的成员。

那么,有什么用例我们应该使用: class协议吗?或者有人知道@objc的任何缺点

补充:谢谢安东尼奥!

代码语言:javascript
复制
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}
}

所有这些都会导致编译错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 11:39:17

我认为它们是两种不同的东西,不能互相比较。

我的经验法则是,除非需要objc兼容性,或者除非只需要通过@objc提供某种功能,否则应该始终使用本地的快速协议。

然而,使用快捷协议的优点是所有在objc中不可用的快速相关特性都可以使用,例如:

  • 仿制药
  • 元组
  • 斯威夫特公馆

但不管怎么说,我还是会坚持用快捷的方式来选择纯粹的文体选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27421779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档