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

当前回答

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

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

#import <ProductName/ProductModuleName-Swift.h>

而不是

#import "ProductModuleName-Swift.h"

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

其他回答

我的问题是我在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将其替换为_

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

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

#import <ProductName/ProductModuleName-Swift.h>

而不是

#import "ProductModuleName-Swift.h"

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

在我的例子中,除了这些步骤:

产品模块名称:myproject 定义模块:YES 嵌入式内容包含Swift:是 安装Objective-C兼容性头:YES Objective-C桥接头:$(SRCROOT)/Sources/SwiftBridging.h

我需要把类作为公共的,以创建productName-Swift.h文件:

import UIKit

   @objc public class TestSwift: NSObject {
       func sayHello() {
          print("Hi there!")
       }
   }

我不需要改变构建中的任何设置,也不需要将@obj添加到类中。

我所要做的就是创建bridge-header,当我在Objective-c项目中创建Swift类时,它会自动创建。然后我要做的就是

导入"Bedtime-Swift.h" <-需要使用swift文件的objective-c内部文件。

有两个条件,

在objective - c文件中使用swift文件。 使用你的objective c文件在swift文件。

因此,为了达到这个目的,你必须遵循以下步骤:

在objective-c项目中添加swift文件,反之亦然。 创建头文件(.h)。 进入构建设置,执行以下步骤搜索, 搜索这个文本“brid”并设置头文件的路径。 “定义模块”:YES。 “总是嵌入Swift标准库”:是的。 “安装Objective-C兼容头”:YES。

之后,清理并重新构建项目。

在objective - c文件中使用swift文件。

在这种情况下,首先在swift文件中你的类之前写“@objc”。

之后,在objective - c文件中,写这个,

  #import "YourProjectName-Swift.h"

使用你的objective c文件在swift文件。

在你的头文件中,写这个,

  #import "YourObjective-c_FileName.h"

我希望这对你有所帮助。