从Objective-C类调用Swift函数

我有一个旧的Objective-C项目,我想调用新的Swift函数和对象,我已经创建了文件“ <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文件内的文档进行操作


@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。 -v查看调用)


PIPIONE
浏览 934回答 3
3回答

慕村9548890

解决了问题,我以前.h在我的Objective-C类中创建了一个新文件并将其包括在内,<ProductModuleName>-Swift.h但是,正如我稍后发现的,此步骤不是必需的,因为编译器会创建不可见的必需文件。只需将<ProductModuleName>-Swift.h它包括在您的课程中,它就可以正常工作。

白猪掌柜的

是啊谢谢这很奇怪,但是会起作用1) Add @objc&nbsp; to&nbsp; Swift class2) Add in .m&nbsp;&nbsp; &nbsp; #import "(ProjectName)-Swift.h"3) Call from .h&nbsp; &nbsp; @class SwiftClass;4)On SwiftClass&nbsp;&nbsp; &nbsp;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新];{无论您要调用swift方法如何,都可以在任何方法中调用Like this。}[myClass methodName];
打开App,查看更多内容
随时随地看视频慕课网APP