当@objc和@nonobjc在swift中编写方法和变量之前?

vik*_*ati 10 iphone objective-c ios swift2 swift3

当我在类的扩展中声明静态参数时,我必须在变量之前编写@nonobjc

 @nonobjc static let test = "test"
Run Code Online (Sandbox Code Playgroud)

有时我必须在方法之前编写@objc,所以在swift中使用@objc和@nonobjc.

任何人都可以帮我解决这个问题吗?

bon*_*oJR 22

Apple在官方文档中解释了Objective-C - Swift互操作性:

在Swift类上使用@objc(name)属性时,该类在Objective-C中可用,没有任何命名空间.因此,在将可存档的Objective-C类迁移到Swift时,此属性也很有用.由于归档对象在归档中存储其类的名称,因此应使用@objc(name)属性指定与Objective-C类相同的名称,以便旧的归档可以由新的Swift类取消归档.

相反,Swift还提供@nonobjc属性,这使得Objective-C中的Swift声明不可用.您可以使用它来解析桥接方法的循环性,并允许重载Objective-C导入的类的方法.如果Objective-C方法被无法在Objective-C中表示的Swift方法覆盖,例如通过将参数指定为变量,则该方法必须标记为@nonobjc.

总而言之,如果要在没有命名空间的情况下将Swift属性公开给Objective-C,请使用@objc.如果要保持属性可用且仅在Swift代码中可访问,请使用@nonobjc.