【问题标题】:Making a mixed Objective-C & Swift Framework制作混合的 Objective-C 和 Swift 框架
【发布时间】:2016-03-04 12:38:55
【问题描述】:

所以我开始着手将 Swift 添加到现有的 Objective-C 框架中。

坏消息是它做起来相当简单,而且看起来好像在工作。这意味着我获得了 Swift 代码来查看 obj-c 类,甚至可以轻松构建。我设置了一个桥接头,添加了我需要的内容,更改了模块名称等,基本上一切正常。

后来我意识到了一些事情。

首先,您不应该在框架中有桥接头。事实上,我尝试了一个测试项目,但它不会让我这样做。但是在我的实际项目中有人允许这样做。

它肯定开始搞砸了。我认为是因为它似乎在 Swift 生成的标头中包含了桥接头,或者可能是其他与它如何导入伞形标头有关的东西。我得到了让 swift 自动使用 Umbrella 标题的简单性,但我需要另一个标题有几个原因。

  1. 从框架内部导入我不想成为公共框架标头的私有标头。
  2. 导入我们链接的其他框架并需要访问其公共标头。我不想在这个框架的总括标题中导入这些其他框架。

在这种情况下我面临几个问题。

外部目标无法使用@import 加载此框架。而且我也不能直接导入框架的桥接头。这意味着我无法从另一个目标访问 Swift 代码。我写了一个访问器类,在这种情况下,这没什么大不了的。直到我意识到它包含一个测试用例目标,所以如果没有框架目标中的某种测试实现,我就无法有效地测试这段代码。甚至我的测试目标中的 swift 测试都无法访问 Swift。

那么有没有办法做到这一点? TL:DR “我能否拥有一个混合的 Swift/Obj-c 框架,它的 Swift + Obj-c 可从外部访问,并保持其部分 obj-c 私有?”

【问题讨论】:

  • 我很确定你可以,我的男人,看看这里:stackoverflow.com/questions/28815487/…
  • 看起来很有趣。如果您遇到任何其他问题,请随时通知我们。上一条评论中提到的另一个问题涉及在 Swift 中使用 Obj-C 框架,但根据那里提到的 Apple 文档,可以使用 Obj-C 和 Swift 混合编写框架。
  • 我想,目前还没有解决这个问题的办法。互操作性似乎只能通过公共 objc-headers 或公共 swift-types 起作用。这使得混合框架和缓慢而稳定的框架迁移到 Swift 对我来说毫无用处,因为框架的一个关键特性是只公开某个 API 并保持大部分私有。如果专家可以澄清为什么会这样,我将不胜感激并接受它作为答案。
  • @napierzaza:看看这个:stackoverflow.com/a/24005242/1208191他说In some situations, particularly when working with ObjC frameworks, you don't add an Objective-C class explicitly and Xcode can't find the linker. In this case, create your .h file named as mentioned above, then make sure you link its path in your target's project settings like so我的框架确实可以使用桥接头!!!事实上,它不会编译,但是,我坚持在其他应用程序目标中导入这个框架(项目)。我的说“无法导入桥接头 ***”。

标签: ios objective-c swift macos frameworks


【解决方案1】:

我解决了。

我在类和协议中添加了public,这样我就可以在objective-c中访问swift代码

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多