从obj c调用swift

时间:2016-04-11 00:40:50

标签: ios swift

我试图在objC的swift文件中调用一个函数。我试过" #import project_name-Swift.h"但我收到一个错误 - > "找不到project_name.h文件"

objC文件是pod的一部分。我不知道这是否与问题有关。

感谢您的帮助! :)

7 个答案:

答案 0 :(得分:6)

您需要按照以下简单步骤解决问题:

1。)首先从项目中删除现有的桥接头文件(选择文件 - >右键单击 - >在查找程序中显示)。

2。)一旦删除,那么也检查它是否存在于项目中。如果不存在,然后在项目的根目录下准备新的头文件。

3。)现在选择你的项目并进入构建设置。 finf swift编译器 - 代码生成部分。

enter image description here

4.。)将安装Objective-C兼容性标题设置为

5.)在 objective-c桥接标题中设置路径,如: projectname / bridging-header-filename.h

6。)现在按 alt 键选择产品菜单,然后选择清理构建文件夹。运行你的项目,现在它运作良好..!

答案 1 :(得分:2)

复制并粘贴您希望在#import语句旁边使用的确切头文件name.h文件。您不需要导入project_name,您需要要使用的头文件。我会把它放在评论中,但我在这里有点新意,我想我不能发表评论。

示例如果您想在项目中使用SWRevealViewController.h,则需要

#import "SWRevealViewController.h"
在您的桥接头文件中

我希望这会有所帮助

答案 2 :(得分:2)

欢迎来到StackOverflow,Sam!您需要一个桥接头来将Objective C代码与swift代码连接起来。 Here是一个关于如何创建桥接标头的视频,如果您还没有。如果这个答案可以帮助您,请点击复选标记使其正确无误,然后单击向上箭头以帮助我!

答案 3 :(得分:2)

您需要添加一个桥头文件(PROJECT_NAME-Bridging-Header.h)并添加XCode在那里找不到的必需标头。您可以在Build Settings下的项目Objective-C Bridging Header中找到该文件的名称。

当你向你的Swift项目添加一个objc文件并且它用于从Swift调用Objective-C时,会自动神奇地创建这个文件,但显然,它也需要相反的方向。

您需要做的其他事情是在您的objective-c文件中添加#import "PROJECT_NAME-Swift.h"。此文件在DerivedData项目的Build目录内深入创建,其命名约定是预定义的。

此外,您需要使用: NSObject扩展Swift类,并在声明开头用@objc标记它们。

最后,如果它们是不同模块的一部分,您需要将Swift中的类和方法标记为public。 Public不是默认访问权限。

答案 4 :(得分:2)

只需在项目的根目录中准备桥接标题,然后重新生成项目。

答案 5 :(得分:2)

只需在项目的根目录中创建桥接头文件,然后在构建设置中设置路径。

答案 6 :(得分:0)

周围有很多混乱,很多人回答了相反的问题(从Swift调用Obj C)。

Apple文档对其进行了清晰的布局here

一个警告,我创建了

import UIKit
import Foundation

@objc open class MySwiftViewClass: UIView {

        // this next call becomes 
        //    [myDaBar myFuncWithString:aString];  
        @objc open func myFunc(withString:String) {
        let greeting = "Hello!"
    }
}

正如您在注释中看到的那样,成员函数myFunc获得了附加在其后的变量名称。

您也可以在生成的头文件中查看它,

/Users/<yourname>/Library/Developer/Xcode/DerivedData/TargetName-bthdvookrisgtractdotackhxhjh/Build/Intermediates.noindex/TargetName.build/Debug-iphonesimulator/ProductName.build/DerivedSources/Project-Name-Swift.h