我有一个旧的Objective-C项目,我想调用新的Swift函数和对象,我已经创建了文件“ <ProjectName>-Bridging- Header.h”和“ <ProjectName>-Swift.h”
<ProjectName>-Bridging- Header.h
<ProjectName>-Swift.h
对我来说,从Swift调用函数到Objective-C很容易,但是我有一个反向问题。
因此,我创建了一个简单的类“ System.Swift”
import Foundation @objc class System : NSObject { @objc func printSome() { println("Print line System"); } }
现在我尝试按照此处和<...>-Swift.h文件内的文档进行操作
<...>-Swift.h
@class System; @interface System : NSObject -(void)printSome; @end
并且已将其导入到Objective-C类中。此时,在我的Objective-C代码的Objective C类(当前为UIViewController)内部,我尝试调用“ printSome”方法:
- (void)viewDidLoad { [super viewDidLoad]; System * sis = [[System alloc] init]; [sis printSome]; //any additional setup after loading the view from its nib. }
现在我有以下错误:
架构i386的未定义符号:“ _ OBJC_CLASS _ $ _ System”,引用自:“ ObjectiveC_Class_That_Call_Swift_Object”中的objc-class-ref。o ld:架构i386找不到符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
解决问题后,我以前.h在我的 Objective-C 类中创建了一个新文件,并在其中包含了一个新文件,<ProductModuleName>-Swift.h但是,正如我稍后发现的,此步骤不是必需的,因为编译器会创建不可见的必需文件。
.h
<ProductModuleName>-Swift.h
只需将<ProductModuleName>-Swift.h它包括在您的课程中,它就可以正常工作。