我试图在objC的swift文件中调用一个函数。我试过" #import project_name-Swift.h"但我收到一个错误 - > "找不到project_name.h文件"
objC文件是pod的一部分。我不知道这是否与问题有关。
感谢您的帮助! :)
答案 0 :(得分:6)
您需要按照以下简单步骤解决问题:
1。)首先从项目中删除现有的桥接头文件(选择文件 - >右键单击 - >在查找程序中显示)。
2。)一旦删除,那么也检查它是否存在于项目中。如果不存在,然后在项目的根目录下准备新的头文件。
3。)现在选择你的项目并进入构建设置。 finf swift编译器 - 代码生成部分。
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