【问题标题】:Xcode 6 Swift + Objective-C Build Issues - Unknown Types due to Import Order?Xcode 6 Swift + Objective-C 构建问题 - 由于导入顺序导致的未知类型?
【发布时间】:2014-08-12 19:56:03
【问题描述】:

我发现构建一个混合的 Swift/Obj-C iOS 应用程序以避免在将类转换为 Swift 后生成错误非常具有挑战性。

这是一个与 Swift 文档中非常简短的段落有关的问题:

如果您在 Swift 代码中使用自己的 Objective-C 类型,请确保 在导入之前导入这些类型的 Objective-C 标头 Swift 生成的标头到您要访问的 Objective-C .m 文件中 Swift 代码来自。

首先,尽管文档非常明确地将-Swift.h 文件导入.m 文件,但在Obj-C 类的.h 文件中经常会引用现在基于Swift 代码的类的类型,所以我最终不得不在 .h 文件中导入 -Swift.h 大部分时间。与文档相矛盾似乎很奇怪,但我看不出这些标题会如何构建,而且到目前为止大部分时间都有效。

真正的问题发生在生成的-Swift.h文件本身包含编译器错误如

未知类型名称“SomeObjCClass”

解决这些错误的唯一方法似乎是确保在 -Swift.h 文件之前达到所述类,正如文档所建议的那样,但无法弄清楚我发现的构建顺序是如何确定的我自己在生成头文件之前在整个项目中导入了各种 Obj-C 头文件,直到我得到一个工作版本。这不可能是解决此问题的好方法,但我不知道正确的方法。

我如何确定第一次包含 -Swift.h 标头的位置,以便我可以在其上方导入所有必需的 Obj-C 类,然后仅导入 -Swift.h 就足够了根据需要在剩余的地方,或者它的先决条件的集合是否需要每次都包含在它之上(我想这和我现在乱七八糟的事情没有什么不同)?

【问题讨论】:

  • 前向声明有帮助吗?即在 -Swift.h 导入之前使用 @class ObjectiveCClassYouWantToUse; 会导致您出现问题?另请参阅this earlier question,我认为这几乎是重复的。

标签: objective-c xcode swift


【解决方案1】:

根据我目前的经验,为了在 Swift 中使用 Objective-C 类,我只是将那些 .h 文件包含在我的 -Bridging-Header.h 中,而对于需要在 Objective-C 代码中使用的 Swift 类,我将 -Swift.h 包含在那些 .m 文件。

我对这种未知类型没有任何问题。我对 Swift 类的所有引用都包含在 .m 文件中。但是如果你需要在 .h 文件中引用一个 Swift 类,那么你应该只做一个前向声明 @class MySwiftClass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2013-08-01
    • 1970-01-01
    • 2023-04-10
    • 2016-10-21
    • 2014-07-26
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多