ios - 来自另一个目标的 Swift 伞头

标签 ios objective-c xcode swift xcode6

我有一个包含多个目标的项目。主要目标是 Swift 和 Objective-C 类以及 objc 文件的组合,它们通过包含 ModuleName-Swift.h 伞头来使用 Swift 类。但是,当我将相同的源文件包含到多个目标时,除了主要目标之外,无法找到伞头。每个目标的 header 导入中的模块名称应该不同。我如何实现这一目标?

更新:

到目前为止,除了为所有目标设置相同的产品模块名称外,我还没有找到任何其他方法。这似乎没有任何副作用。

最佳答案

我在为我的应用程序编写 Today Extension 时遇到了同样的问题。 我有一个名为 Items.swift 的文件,位于 Today 扩展组件中,并且 包含在该目标中。所以我有以下情况: 主要项目完全用 Objective-C 编写 Today 扩展是用 Swift 编写的

问题:

我想将文件 Items.swift 包含到主项目中并使用它

解决方案:

  1. 确保 Items.swift 包含在主应用目标中
  2. 重要 (!!!) 您应该创建 "ProductModuleName"-Bridging-Header.h 并在项目文件(Objective-C Bridging Header)中添加对此文件的引用选项)即使你的 主要目标只包含 Objective-C 代码
  3. 你的 Items.swift 应该继承自 NSObject 或其后代
  4. 然后将 #import "ProductModuleName-Swift.h" 添加到您想要的位置 使用 Items.swift 并按下 Build

最后,您可以转到 "ProductModuleName-Swift.h" 并确保生成的接口(interface)比您可以使用您的类的 Objective-C 版本

ProductModuleName 你可以在 Build Settings -> Packaging -> Product Module Name 看到

关于ios - 来自另一个目标的 Swift 伞头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058164/

相关文章:

xcode - SKSpriteNode 作为返回错误 - Swift 2

Xcode 11,Command CodeSign 失败,退出代码为非零

ios - cocos2D 替换场景未初始化类

ios - 如果后台任务过期则不调用 didBecomeActive

ios - 可能很容易修复 : Invalid argument type 'void' to unary expression

iphone - 同时支持 iOS 6 和 iOS 5 自动旋转

objective-c - 如何自动激活 OS X 服务菜单中的项目

iphone - 通过在 iOS Xcode 中打印 "(lldb)"调用 iphone 中的实例方法设置值导致崩溃

ios - 在 12 小时制设备中使用 Date()

ios - 评分按钮在点击时不会退出到 App Store