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.
归档时间: |
|
查看次数: |
6396 次 |
最近记录: |