Ios 混合语言框架
我有一个用Objective-C编写的框架(我们称之为MyKit),我正在用一些Swift类扩展它。我正试图通过以下文档了解它: 据我所知,我不应该有一个桥接头类,而是将我所有的include放在伞形头文件中(据我所知是这样的) 所以我在MyKit.h中写道:Ios 混合语言框架,ios,objective-c,swift,frameworks,Ios,Objective C,Swift,Frameworks,我有一个用Objective-C编写的框架(我们称之为MyKit),我正在用一些Swift类扩展它。我正试图通过以下文档了解它: 据我所知,我不应该有一个桥接头类,而是将我所有的include放在伞形头文件中(据我所知是这样的) 所以我在MyKit.h中写道: #import <MyKit/ModelObjectA.h> #import <MyKit/ModelObjectB.h> #import <MyKit/ControllerObjectC.h> #导
#import <MyKit/ModelObjectA.h>
#import <MyKit/ModelObjectB.h>
#import <MyKit/ControllerObjectC.h>
#导入
#进口
#进口
我没有列出ControllerObjectD.swift,即使它也在这里?或者我应该包括
#import <MyKit/ControllerObjectD-Swift.h>
#导入
?
ControllerObject使用ModelObjectA和ModelObjectB。既然我没有桥头文件,我在其中得到了编译错误,因为它找不到这些对象
文档中说“Swift将看到您在伞式标题中公开的每个标题。”当我将框架导入其他项目时,这是正确的,但框架项目无法编译,因为它看不到它。我已经打开了“定义模块”构建设置
也许我对伞头有些误解了吧?我在哪里可以说“嗨,项目,这是伞头文件”?如果我将伞形头文件设置为桥接头文件,框架将编译,但这听起来像是这样回到了开头
干杯
Nik我认为您需要使用桥接头才能在swift中访问obj-c代码。 更多链接 因此,这是一个从obj-c导入并传输到swift的文件。名字很重要,所以要小心。希望能有帮助
p、 您还需要将此标题路径添加到项目设置中我相信您的问题可能在于Swift类中的访问修饰符,不过我已经编写了一个简短的指南和示例项目来帮助您: 样本项目可以找到 混合语言框架由两部分组成:
1.将Objective-C导入Swift 例如,如果您有一个名为
Player
的Objective-C类,您希望将其添加到名为Game
的swift类中
根据文档,您需要执行以下两个步骤才能将Player
对象导入Game
对象
#import <Framework/Player.h>
2.将Swift导入Objective-C 要将Swift
Game
类导入Player
对象,我们可以遵循类似的过程
#import <ProductName/ProductModuleName-Swift.h>
#导入
在我的情况下,其作用如下:
#import <SwiftObjC/SwiftObjC-Swift.h>
#导入
我想,对你来说:
#import <MyKit/MyKit-Swift.h>
#导入
因此,请确保要访问的所有属性、方法和类在swift文件中都定义为public,否则它们对Objective-C不可见我希望这能帮助您解决问题。来自苹果公司的文档:Swift类必须是Objective-C类的后代,才能在Objective-C中访问和使用。有关您可以从Objective-C访问什么以及如何导入Swift接口的更多信息,请参阅Swift类型兼容性
例如,您的公共swift类需要扩展NSObject。框架目标中不允许使用桥接头。虽然我很想知道为什么。经过半天的“试错”和浏览解决方案后。这是解释得最恰当的答案。这对我很有帮助,非常感谢。有没有办法让斯威夫特看到类,而不将它们暴露在伞头中?我有一些我不想向框架用户公开的内部类,但是我不能在新的Swift类中访问它们。我不相信有任何方法可以做到这一点。我还没有找到一种方法。有人知道是否可以用cocoa touch静态库做完全相同的事情吗?将Swift导入Objective-C时,是否可以避免Swift类公开?
#import <MyKit/MyKit-Swift.h>