从Objective C类调用Swift函数
我有个问题。 我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我已经创build了文件“-Bridging-Header.h”和“-Swift.h”
很容易我从Swift调用目标C的function,但我有一个相反的问题。
所以我创build了一个简单的类“System.Swift”
import Foundation @objc class System : NSObject { @objc func printSome() { println("Print line System"); } }
现在我已经尝试按照这里的文档,并在<…> – Swift.h文件中我写这个
@class System; @interface System : NSObject -(void)printSome; @end
我已经在我的目标C类中导入它。 在我的目标C代码(目前UIViewController)的目标C代码中,我尝试调用“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:error:链接器命令失败,退出代码1 -v看到调用)
有人可以帮助我吗?
关心所有。
问题已解决,我之前创build了一个新的.h
文件,并将其包含在名为<ProductModuleName>-Swift.h
Objective-C类中,但是,正如我之后发现的那样,此步骤不是必需的,因为编译器创build了不可见的必需文件。
只需在您的类中包含<ProductModuleName>-Swift.h
,它就可以工作。
对了谢谢
这很奇怪,但它会工作
1) Add @objc to Swift class 2) Add in .m #import "(ProjectName)-Swift.h" 3) Call from .h @class SwiftClass; 4)On SwiftClass click "Command" + Left Click (Apple Documantation) 5) To see "-Swift.h" -> click "Command" + Left Click
应用程序将在-Swift.h中为此类生成接口
示例:SWIFT_CLASS(“_ TtC10Project17220PLHelper”)@interface PLHelper
- (void)notifyForDownloading:(NSDictionary *)userInfo;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER; @结束
假设我们有ProjectName“MyFirstProjectOnSwift”和swift类名“mySwiftClass”,并且objectiveC类是“MyObjectiveCLass”
以下步骤是:
在“MyObjectiveCLass.m”中添加#import“MyFirstProjectOnSwift-Swift.h”
在MyObjectiveCLass.h中添加@class mySwiftClass;
然后在MyObjectiveCLass.m中
mySwiftClass * myClass = [mySwiftClass new]; {在任何你想调用swift方法的任何方法中调用此方法。}
[myClass methodName];
检查在您的.m文件在目标C中有导入的-Swift.h文件:
#import <YourProjectName-Swift.h>
点击该行,然后左键单击 – 跳转到定义。
这个文件应该被自动包含,而不是手动的。
如果即使导入<ProductModuleName>-Swift.h
后仍然看不到类。
确保你的类是inheritance一个本地类(例如UIViewController
),或者至less如果它只是一个工具类,使它的子类NSObject
。 你的class级现在应该显示。