【问题标题】:Swift and Objective C: Project-Swift.h and Project-Bridging-Header.h conflictSwift 和 Objective C:Project-Swift.h 和 Project-Bridging-Header.h 冲突
【发布时间】:2015-01-02 19:03:15
【问题描述】:

我有一个混合了 Swift 和 Objective-C 的项目。

我目前正在尝试在一个用 Objective-C 编写的视图控制器上从 Swift 调用一个方法。

为了公开该方法,我将视图控制器的标头添加到 Bridging-Header.h 文件中。

但是,视图控制器引用了 Project-Swift.h,在编译桥接头时,它显然“不存在”。如果我删除 Project-Swift.h 的包含,项目会编译,但是我无法从 Objective-C 端访问我需要的 Swift 功能。

确切的错误是:

"/Project/ViewController.h:10:9: error: 'Project-Swift.h' file not found
#import "Project-Swift.h"
        ^
<unknown>:0: error: failed to import bridging header '/Project/Project-Bridging-Header.h'

我似乎有鸡和蛋的问题。

关于如何解决这个问题的任何想法?我可以在不包含桥接头的情况下调用 Objective-C 方法吗?

【问题讨论】:

    标签: objective-c xcode swift


    【解决方案1】:

    我建议您将Project-Swift.h 文件包含在.m 文件中,因此在ViewController.m 中。如果您在标题中定义了任何需要的类,只需使用 @class MyClassFromProjectSwift 添加前向类声明。

    【讨论】:

    • 感谢您的快速回复。前向声明类效果很好(谢谢!)但是我在使用这种方法前向声明协议时遇到了麻烦。 (例如,@protocol SecondSwiftControllerDelegate; 会产生警告 Cannot find protocol definition)。
    • 我希望你那里没有你需要的协议,因为遗憾的是你不能转发声明那些。我会尝试在 ObjC 中使用此协议声明。问题是,您尝试执行的操作会导致包含循环。编译器需要桥接头才能编译 Swift 部分,并且需要编译 Swift 部分才能获得 ObjC 部分的协议定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多