【发布时间】:2020-06-28 05:40:57
【问题描述】:
我想写一个 PAT,我不关心 Obj-C 的互操作性。 @nonobjc 属性听起来很完美,但它仅适用于变量和方法。 对 Obj-C 隐藏协议有什么类似的吗?
【问题讨论】:
标签: swift language-interoperability
我想写一个 PAT,我不关心 Obj-C 的互操作性。 @nonobjc 属性听起来很完美,但它仅适用于变量和方法。 对 Obj-C 隐藏协议有什么类似的吗?
【问题讨论】:
标签: swift language-interoperability
您似乎误解了@nonobjc 属性的用途:
来自docs:
非对象
将此属性应用于方法、属性、下标或初始化程序 声明禁止隐含的
objc属性。
如果您进一步向下滚动页面,它会告诉您哪些内容将具有隐式 objc 属性:
编译器将
objc属性隐式添加到Objective-C 中定义的任何类的子类中。但是,子类不能是泛型的,也不能从任何泛型类继承。 [...] objc 属性也在以下情况下被隐式添加:
- 该声明是子类中的覆盖,而超类的声明具有 objc 属性。
- 声明满足具有
objc属性的协议的要求。- 声明有
IBAction、IBSegueAction、IBOutlet、IBDesignable、IBInspectable、NSManaged或GKInspectable属性。
这不包括协议,因此协议永远不会隐式暴露给 Objective-C。这意味着您不需要协议上的nonobjc 属性来抑制协议上的隐式objcs。默认情况下,协议不会暴露给 Objective-C,除非你用@objc 标记它们。
【讨论】: