【问题标题】:Swift Bridging Header and visibility of Obj-C classSwift Bridging Header 和 Obj-C 类的可见性
【发布时间】:2014-08-19 13:10:29
【问题描述】:

我已经添加了桥接头,在构建设置中指定了它的完整路径,桥接头是自动创建的。在此之后,我在其中包含了我的 obj-c 头文件。但是每次调用对象构造函数的尝试都失败了:“使用未声明的标识符”。

我做过的事情清单:

  1. 已创建 .m 文件,Xcode 建议创建桥接头
  2. 将 obj-c 文件添加到项目中并在 header 中导入
  3. 在构建设置中提供了桥接头文件的完整路径

  1. 在代码中使用了 Obj-C 类型...但它无法构建。
  2. 然后,我提供的不是标题的完整路径,而是项目所在文件夹的路径 - 没有结果。

我根据苹果文档仔细检查了所有步骤,但没有结果。 为什么?任何帮助将不胜感激。

【问题讨论】:

  • 您遇到了什么错误?将您的 Obj-C 类头添加到桥接头后,您应该能够只初始化一个 Obj-C 对象,然后像平常一样使用它的方法。您不需要在构建设置中使用完整路径,因为相对路径应该可以正常工作。我敢打赌,那里的某个地方有路径错误。
  • 发布代码对我们有帮助。
  • 我已经编辑了答案
  • 尝试运行终端,运行 cat "YOUR_BRIDGING_HEADER_PATH",会打印什么吗?另外,您为什么不尝试创建一个新的测试项目,重新开始所有步骤,看看缺少什么?
  • 是的,它包含导入“Bl_KeyChainNativeWrapper.h”

标签: ios objective-c swift xcode6 bridging-header


【解决方案1】:

按照以下步骤操作:

  1. 创建一个 Swift 项目
  2. 将测试类添加为 Cocoa 类,而不是分别使用 .m 和 .h。 Xcode 提示添加桥接头。
  3. 在桥接头中导入测试类标头,您已经这样做了。在 Swift 中实例化测试类应该没有问题。
  4. 将 BL_KeyChainWrapper .m 和 .h 复制到 finder 中的项目目录。
  5. 将 BL_KeyChainWrapper 文件拖到项目中并确保添加到目标。
  6. 在桥接头中导入 BL_KeyChainWrapper 标头。
  7. 在 Swift 中实例化 BL_KeyChainWrapper 类。

如果按照上述步骤,仍然有错误。可能是您没有在 BL_KeyChainWrapper.h 中声明一个名为 BL_KeyChainWrapper 的类。确保在您的 BL_KeyChainWrapper.h 中,您有如下代码:

@interface BL_KeyChainWrapper : BaseClass

【讨论】:

  • 没错,蒂姆库克不会说得更准确。 +1 麻烦在这里-“可能是您没有在 BL_KeyChainWrapper.h 中声明一个名为 BL_KeyChainWrapper 的类。确保在您的 BL_KeyChainWrapper.h 中,您有如下代码:”Gettin olda,伙计们(感谢您的帮助!
【解决方案2】:

好吧,在创建一个带有桥接头的测试项目后,我发现了以下内容:

  1. 我添加了 .m 文件,Xcode 建议我创建桥接头。

  2. 我添加了.h文件,命名为class,这样就创建了Obj-C类。

与:

在构建设置中 - 代码生成部分如下所示:

桥接文件位于以下路径:

项目名称/BridgHeader.h

与 .xcodeproj 文件同级存在。

但是:

当我将已创建的 Obj-C 类添加到项目中并在桥接头中添加标头导入时,我无法使用它:

所以,我猜,Xcode 6 beta 2 无法将现有文件添加到 swift 项目中。有人遇到过这个麻烦吗?因为我不想粘贴我开发了 5 年的所有现有库来创建文件。

PS:

桥接头:

【讨论】:

  • 尝试创建一个新的空白 Objective C 类,看看它是否能让你使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多