【问题标题】:Can't access objective-c method from swift. Bridge setup, and obj-c class instantiates无法从 swift 访问objective-c 方法。桥接设置和 obj-c 类实例化
【发布时间】:2016-06-17 05:28:57
【问题描述】:

这是我的第一个 IOS 应用程序,到目前为止一切顺利。我的代码在 Swift 中,我需要在我的应用程序中使用位于 Obj-C 中的 Gold Raccoon FTP 库:https://github.com/albertodebortoli/GoldRaccoon

我导入了 Gold Raccoon 文件并创建了 bridge header。您使用的主要类是GRRequestsManager,我可以在正在运行的应用程序中成功地实例化它。但是,我无法访问该类中的 addRequestForUploadFileAtLocalPath 方法。

我最初在 bridge 文件中只有 GRRequestsManager.h 导入语句。由于它继承了GRRequestsManagerProtocol.h,其中定义了我尝试使用的实际方法(addRequestForUploadFileAtLocalPath),我决定将其添加到我的桥头文件中,然后瞧,突然弹出自动建议方法,我可以把它放在我的代码中而没有错误。几分钟后,我再次收到一条错误消息,无论如何它现在都无法正常工作。我尝试关闭并重新打开 Xcode 并清理/重建无济于事。

下面是一个组合图像(由于我的观点,只能发布 1 个图像)首先显示 bridging-header 和第二个(由红线分隔)我试图调用该方法的代码中的错误。你可以看到它很好地识别了这个类。

【问题讨论】:

  • addRequestForUploadFileAtLocalPath 的声明添加到您的问题中。
  • 这是它在 GRRequestsManagerProtocol.h 文件中的声明:imgur.com/3XKOlhV,这是它在 GRRequestsManager.m 文件中的实现:imgur.com/djpACLw

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


【解决方案1】:

好吧,我继续在 Gold Raccoon 库中的每个头文件中添加了一个包含到我的桥接头中,现在该方法被识别并且我的代码编译!我仍然不太确定为什么我需要这样做,但它确实成功了。如果有人愿意解释为什么我很想理解它。

【讨论】:

  • 当你在 Objective-C 中编程时,你 #import 在你的应用程序的 .m 文件中你需要的任何标题,所以模式在 Swift 中是相同的,你必须显式地 #import桥接头中的那些相同的.h 文件。是否包含 所有 头文件,或仅包含关键文件,取决于 Gold Racoon 的设计方式,但其文档应明确说明您需要导入哪些文件。
  • 谢谢罗伯。根据 Gold Raccoon 的文档,甚至在它的 obj-C 演示应用程序中,您只需要包含 GRRequestsManager.h(并包含 CFNetwork 框架)。自从我认真地编写 C 和 C++ 以来已经有十多年了,但这也是我的回忆。我认为在使用桥接文件时如何解决问题可能存在一些问题,特别是因为它在没有我添加对所有内容的引用的情况下暂时起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 2014-06-28
  • 2011-01-10
  • 2016-09-20
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多