我尝试在我的应用程序中集成Swift代码。我的应用程序是用Objective-C编写的,我添加了一个Swift类。我做了这里描述的所有事情。但我的问题是Xcode还没有创建-Swift.h文件,只有桥接头。我创建了它,但它实际上是空的。 我可以在Swift中使用我所有的ObjC类,但我不能反之亦然。我用@objc标记了我的swift类,但它没有帮助。我现在该怎么办?

编辑:苹果说:“当你将Swift代码导入Objective-C时,你依靠xcode生成的头文件将这些文件公开给Objective-C。[…此头文件的名称是您的产品模块名称,后跟“-Swift.h”。

现在当我想导入这个文件时,它会给出一个错误:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu

这是我的FBManager.swift文件:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}

当前回答

只包括 以。m或。h格式导入“myProject-Swift.h”文件

附注:你不会在文件检查器中找到“myProject-Swift.h”,它是隐藏的。但它是由应用程序自动生成的。

其他回答

我也遇到了同样的问题,最后我发现他们的目标不同。 ObjC类附加到Target1和Target2, Swift类只附加到Target1,在ObjC类中不可见。

希望这能帮助到一些人。

对于Swift 5:

将@objc关键字添加到类和方法中 向类和方法添加public关键字 让你的类继承自NSObject 建设项目 在Objective-C文件中输入“MyProject-Swift.h” @objc MyClass: NSObject { @objc myMethod() { } }

我有同样的错误:myProjectModule-Swift.h file not found”,但是,在我的情况下,真正的原因是错误的部署目标: “Swift在10.9之前的OS X上不可用;请将MACOSX_DEPLOYMENT_TARGET设置为10.9或更高版本(目前是'10.7')” 因此,当我将部署目标更改为10.9时,项目已经成功编译。

文件是自动创建的(这里讨论的是Xcode 6.3.2)。但您不会看到它,因为它在派生数据文件夹中。在用@objc标记你的swift类后,编译,然后在你的派生数据文件夹中搜索swift .h。您应该在那里找到Swift头文件。

我遇到了问题,Xcode不喜欢把my- project - swift .h重命名为my_Project-Swift.h “。”"-"等符号。使用上述方法,您可以找到文件名并将其导入到Objective-C类中。

我遇到的问题是,我会在objective-c桥接头中添加类,而在那些被导入的objective-c头中,它们试图导入swift头。它不喜欢那样。

因此,在我所有使用swift但也桥接的objective-c类中,关键是确保在头文件中使用前向类声明,然后在.m文件中导入“*-Swift.h”文件。