【问题标题】:Objective-C can't find Swift protocolObjective-C 找不到 Swift 协议
【发布时间】:2018-05-16 02:30:06
【问题描述】:

这个问题与this 的问题基本相同,但那个问题没有得到回答。

TL;DR:协议未显示在MyProject-Swift.h 秘密桥接文件中。因此(不出所料)Obj-C 代码找不到它。

我已经能够在一个从头开始的项目中复制它。这就是我所做的。

  1. 创建新的单视图 iOS Objective-C 项目。
  2. 通过“新建文件”菜单添加一个新的 Swift UIView 子类。
  3. 确认MyProject-Bridging-Header.h 已创建。 (明显)
  4. 确认秘密MyProject-Swift.h 文件已自动创建。 (在DerivedData/.../DerivedSources 的下方)。
  5. 将此视图的一个实例添加到我的ViewController.m
  6. ViewController.m 中包含MyProject-Swift.h 文件。
  7. 成功构建 -- 完整性检查

现在奇怪了……

  1. 通过“新建文件”菜单添加 Swift 协议文件。
  2. 使ViewController 符合并实现此协议。
  3. ViewController.m 的这个位置构建失败:

    #import "MyProject-Swift.h" @interface ViewController () <MyProtocol> // Can't find protocol declaration

检查MyProject-Swift.h 文件确认协议不在其中。但是在一些大型的预先存在的混合项目(确实构建)中,我没有在任何 他们的 -Swift.h 文件中看到任何协议。

如何在 Objective-C 中识别 Swift 协议?

【问题讨论】:

  • 按照您的说明 1...10,我的示例项目编译良好,MyProtocol 可以在 MyProject-Swift.h 中找到。该协议真的与 Objective-C 兼容吗? (有@objc?)在使用之前,你是否成功编译了协议的.swift文件(在你的#8和#9之间)?
  • @objc 做到了。我猜在我查看的预先存在的混合项目中,Swift 协议仅由 Swift 类使用。附带说明一下,当我启动 Xcode 这个 AM 并尝试构建时(在添加 @objc 之前),我得到了 additional 错误 -Swift.h 找不到文件。尽管它确实存在。我在调试这个问题的过程中偶尔会发生这种情况,这极大地阻碍了我的搜索。漏洞?不管怎样,把你的建议写下来,我会把它标记为答案。
  • 如果@objc是唯一的问题,有一些线程描述它,例如this one。关于-Swift.h文件未找到的错误,某些错误会阻止刷新-Swift.h。将所有错误注释掉即可构建成功,然后一一取消注释。
  • 你是对的,我希望我能找到你提到的线程。关于未找到的文件,注释掉所有需要它的代码是不切实际的,因为我正在将一个 700 多个文件项目从 Obj-C 移植到 Swift。然而,做一个干净的项目退出并重新启动 Xcode 似乎可以解决问题。

标签: objective-c swift migration swift-protocols


【解决方案1】:

我已经为我的项目做了这个

定义协议时可以在协议定义前添加@objc

@objc protocol NewViewControllerDelegate {

}

你已经完成了

注意:我认为@objc 使 swift 协议和类对目标 c 可见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多