我尝试在我的应用程序中集成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
    }
}

当前回答

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

其他回答

我的问题是我在xcode创建桥文件后卡住了,但我仍然在头文件MYPROJECTNAME-swift.h中得到了错误

1.我检查终端和搜索所有自动创建的swift桥文件:

find ~/library/Developer/Xcode/DerivedData/ name "*- swift .h"|xargs basename|sort - . find ~/library/Developer/Xcode/DerivedData/ name "*- swift .h

你看xcode创建了什么。

在我的例子中,我在我的项目名称中有空格,xcode将其替换为_

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

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

对于那些以框架为目标的人来说可能也有帮助:

自动生成的头文件的import语句看起来与应用程序目标有点不同。除了在其他答案中提到的其他事情外,使用其他答案

#import <ProductName/ProductModuleName-Swift.h>

而不是

#import "ProductModuleName-Swift.h"

根据苹果关于框架目标的Mix & Match文档。

好吧,在阅读了所有的评论和尝试、阅读、再尝试之后,我设法将swift类包含到我的Big obj-c项目中。 所以,谢谢你的帮助。 我想分享一个技巧,帮助我更好地理解这个过程。 在.m类中,转到swift目标名称的导入行#import "myTargetName-Swift.h" 然后点击键:

命令+鼠标点击->跳转到定义

在那里你可以看到从swift到obj-c的所有转换,在那里你会发现在obj-c中重新声明的各种函数。 希望这条建议能像帮助我一样帮助你。

@sig的答案是最好的之一,然而,它并不适用于我的旧项目(不是新的!),我需要一些修改。经过大量的变化,我找到了我的配方(使用XCode 7.2):

产品模块名称:$(PRODUCT_NAME:c99extidentifier) 定义模块:NO 嵌入式内容包含Swift: NO 安装Objective-C兼容性头:YES Objective-C桥接头:ProjectName-Bridging-Header.h

最后一点(5)至关重要。我只把它放在第二部分(目标字段),项目字段应该是空的:否则,它不会为我生成正确的“Project- swift .h”文件(它不包括swift方法)。