【问题标题】:Is there a Swift attribute, such as @nonobjc designed for protocols?是否有 Swift 属性,例如为协议设计的 @nonobjc?
【发布时间】:2020-06-28 05:40:57
【问题描述】:

我想写一个 PAT,我不关心 Obj-C 的互操作性。 @nonobjc 属性听起来很完美,但它仅适用于变量和方法。 对 Obj-C 隐藏协议有什么类似的吗?

【问题讨论】:

    标签: swift language-interoperability


    【解决方案1】:

    您似乎误解了@nonobjc 属性的用途:

    来自docs

    非对象

    将此属性应用于方法、属性、下标或初始化程序 声明禁止隐含的objc 属性。

    如果您进一步向下滚动页面,它会告诉您哪些内容将具有隐式 objc 属性:

    编译器将objc 属性隐式添加到Objective-C 中定义的任何类的子类中。但是,子类不能是泛型的,也不能从任何泛型类继承。 [...] objc 属性也在以下情况下被隐式添加:

    • 该声明是子类中的覆盖,而超类的声明具有 objc 属性。
    • 声明满足具有objc 属性的协议的要求。
    • 声明有IBActionIBSegueActionIBOutletIBDesignableIBInspectableNSManagedGKInspectable 属性。

    这不包括协议,因此协议永远不会隐式暴露给 Objective-C。这意味着您不需要协议上的nonobjc 属性来抑制协议上的隐式objcs。默认情况下,协议不会暴露给 Objective-C,除非你用@objc 标记它们。

    【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2016-10-25
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多