【问题标题】:Swift umbrella header from another target来自另一个目标的 Swift 伞头
【发布时间】:2014-09-26 11:08:18
【问题描述】:

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

更新:

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

【问题讨论】:

    标签: ios objective-c xcode swift xcode6


    【解决方案1】:

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

    问题:

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

    解决办法:

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

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

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

    【讨论】:

    • 如果我在主目标中有这么多文件,并且在 objc 中,并且需要将所有这些文件添加到今天的扩展名中,我如何在不重复文件的情况下添加这些文件
    • @Rafeek,你不能。今天的扩展是另一个项目。所以,你需要从你的主项目中创建框架部分,并将这个框架添加到你今天的扩展中
    • 这并不能回答我在相同文件中包含相同的伞头文件的问题,这些文件只是添加到不同的目标。
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2022-01-04
    • 2019-11-19
    • 1970-01-01
    相关资源
    最近更新 更多