【问题标题】:Mixing Swift and Objective C : "ProjectName-Swift.h" file not found混合 Swift 和 Objective C:找不到“ProjectName-Swift.h”文件
【发布时间】:2015-02-03 13:08:46
【问题描述】:

所以我正在开发一个包含 Swift 和 Objective-C 类的 iOS 项目。

要实例化一个在 Objective-C 中描述的对象,我知道我需要一个 Bridging-Header 文件,其中包含我必须在我的 Swift 类中使用的所有头文件的导入。它在我的项目上效果很好。 我创建了我需要的所有类,我在 Swift 中子类化了 Objective-C 类,一切都很好。

我的问题是相反的:在 Objective-C 文件中实例化一个 swift 对象。所以我读到我需要有这些选项:

  • 定义模块
  • 在我正在处理的 *.m 文件中添加行 #import "<#YourProjectName#>-Swift.h"

这就是我所做的:

我更改了构建设置中需要更改的所有值。我添加了import 行,我什至尝试创建头文件,但我仍然有"<#YourProjectName#>-Swift.h" file not found 错误。

当然,我将 YourProjectName 替换为实际的模块名称,即我在构建设置的 Packaging 部分的 Product Module Name 下找到的那个。此外,项目名称中没有空格。

我是不是忘记了一步?

感谢您的帮助。

【问题讨论】:

  • 我已经完成了这个#import "-Swift.h 的示例,替换为我的项目名称 sample1 作为 #import "sample1-Swift.h"。
  • 还有一件事,我的项目中已经有了一个桥接头。

标签: ios objective-c xcode swift


【解决方案1】:

确保您是从 .m Objective-C 文件而不是 .h 头文件导入 -Swift.h 文件。 docs 只谈从 .m 导入:

... 将 Xcode 为您的 Swift 代码生成的头文件导入到您想要从中使用 Swift 代码的任何 Objective-C .m 文件中。

-Swift.h 文件是在构建期间生成的,我发现从 .h 文件导入它总是失败,即使我知道该文件存在。由于它是由构建生成的,我猜它在编译器筛选标头时被清除,并在编译 .swift 文件后重新生成。

【讨论】:

  • 我能否以某种方式在头文件中进行这项工作,或者规避这个问题?我需要在一个 Swift 类型的 Objective-C 对象上设置一个 Swift 的属性——如果这仍然有意义的话。
  • 我不明白你所说的“Objective-C 对象是一种 Swift 类型”是什么意思。 Swift 类型不能在 Objective-C 中扩展。
  • 所以@phatblat 你的意思是如果我在 swift @objc class Object 中创建一个类,我不能将它用作 obj-c 类头文件的属性?
  • @phatblat 它似乎对我有用,除非我在我的桥接头中导入那个 objc 类,以便我可以在 swift 代码中使用 OBJC 对象。
  • @jeroen 您可以通过在 .h 中声明 Swift 类来转发声明它@@class ClassName;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多