@objcMembers让我傻了

假设您有一个要在Obj-c中使用的Swift类。 通常,您只需使用@objc属性标记该类及其属性。

但是,如果您的类具有很多方法和属性,而不是使用@objc标记每个方法和属性,则可能更聪明的方法是使用@objcMembers属性,该属性将标记对您而言在Obj-c中可见的所有内容。

现在,这是有趣的部分。 根据苹果

@objcMembers属性应用于类会隐式地将@objc属性添加到其所有与Objective-C兼容的成员。

这样一来,您将认为对于我的示例类来说,两种方法是平等的。 好吧,他们不是。 实际上,这些是:

为什么对我来说意味着什么? 假设您已经使用@objc作为NSObject的子类声明了该类。 该类是Swift框架的一部分,在其他一些Obj-c项目中用作依赖项。

出于某种原因,例如在重构期间,您决定从NSObject中删除继承。 这个故事如何结束? 或多或少像这样:

可是等等! 通过使用@objcMember,您很聪明,因此您得到了……

没错 没有警告。 没有。 就这样