【发布时间】:2018-05-16 02:30:06
【问题描述】:
这个问题与this 的问题基本相同,但那个问题没有得到回答。
TL;DR:协议未显示在MyProject-Swift.h 秘密桥接文件中。因此(不出所料)Obj-C 代码找不到它。
我已经能够在一个从头开始的项目中复制它。这就是我所做的。
- 创建新的单视图 iOS Objective-C 项目。
- 通过“新建文件”菜单添加一个新的 Swift
UIView子类。 - 确认
MyProject-Bridging-Header.h已创建。 (明显) - 确认秘密
MyProject-Swift.h文件已自动创建。 (在DerivedData/.../DerivedSources的下方)。 - 将此视图的一个实例添加到我的
ViewController.m。 - 在
ViewController.m中包含MyProject-Swift.h文件。 - 成功构建 -- 完整性检查
现在奇怪了……
- 通过“新建文件”菜单添加 Swift 协议文件。
- 使
ViewController符合并实现此协议。 -
在
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