我有个问题 . 我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我创建了文件“-Bridging-Header.h”和“-Swift.h”
我很容易将函数从Swift调用到Objective C,但我有一个反向问题 .
所以我创建了一个简单的类“System.Swift”
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
现在我试着按照文档here并在<...> - Swift.h文件中写了这个
@class System;
@interface System : NSObject
-(void)printSome;
@end
我已经在Objective C Class中导入了它 . 在我的Objective C Code的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查看调用)
有人可以帮助我吗?
关心所有 .
5 回答
问题解决了,我之前在我的 Objective-C 类中创建并包含了一个名为
<ProductModuleName>-Swift.h
的新.h
文件,但是,正如我后来发现的那样,此步骤不是必需的,因为编译器会创建必要的文件不可见 .只需在您的课程中包含
<ProductModuleName>-Swift.h
即可 .对了谢谢
这很奇怪,但它会起作用
App将在-Swift.h中为此类生成接口
示例:SWIFT_CLASS(“_ TtC10Project17220PLHelper”)@interface PLHelper
(void)notifyForDownloading:(NSDictionary *)userInfo;
(instancetype)init OBJC_DESIGNATED_INITIALIZER; @结束
假设我们有ProjectName“MyFirstProjectOnSwift”和swift类名“mySwiftClass”,而objectiveC类是“MyObjectiveCLass”
以下步骤是: -
检查-swift.h文件,该文件在objective-C中的.m文件中有导入:
单击该行,然后单击鼠标左键 - 跳转到定义 .
应自动包含此文件,而不是手动包含 .
如果您在导入
<ProductModuleName>-Swift.h
后仍然没有看到您的课程 .确保您的类是子类化本机类(例如
UIViewController
),或者至少如果它只是一个实用程序类,请将其作为子类NSObject
. 你的 class 现在应该展示 .