如果类没有以@@ objc为前缀,是否可以在Objective-C项目中使用Swift编写的pod?

时间:2016-12-22 17:12:35

标签: objective-c swift cocoapods

我想使用的pod在我想要使用的类的开头没有前缀@objc

我还可以在Objective-C项目中使用pod吗?

-

PS:我的问题比How to import and use Swift Pod Framework in Objective-C Project更为通用(主要关注#import语句的问题)

2 个答案:

答案 0 :(得分:4)

ObjC中的所有类都必须符合objc_object结构。在绝大多数情况下,这意味着它是NSObject的子类。类还有一些其他方法可以符合objc_object结构:子类化NSProxy或者只是通过巧妙地布置自己的结构来匹配它并添加钩子(通常在系统库中)处理差异,如免费桥接或libSystem。默认情况下,Swift对象不会这样做,所以它们对ObjC不可见。

添加@objc不是您所需要的。实际上,一般不会编译。您需要使该类成为NSObject的子类。这是您无法使用编译器选项进行的重大更改。它会更改内存布局,消息调度和其他行为。您需要更改源代码并至少重新编译。

答案 1 :(得分:1)

正如Apple guideline所说,

  

私有声明不会暴露给Objective-C,除非它们是   显式标记@IBAction,@ IBOutlet或@objc。

所以,如果你有一个"打开"在类定义之前的关键字,应该没问题。

P.S。:至少,我在Objective-C项目中导入TTGSnackbar pod没有麻烦