从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”

以下步骤是:

  1. 在“MyObjectiveCLass.m”中添加#import“MyFirstProjectOnSwift-Swift.h”

  2. 在MyObjectiveCLass.h中添加@class mySwiftClass;

  3. 然后在MyObjectiveCLass.m中

    mySwiftClass * myClass = [mySwiftClass new]; {在任何你想调用swift方法的任何方法中调用此方法。}

  4. [myClass methodName];

检查在您的.m文件在目标C中有导入的-Swift.h文件:

 #import <YourProjectName-Swift.h> 

点击该行,然后左键单击 – 跳转到定义。

这个文件应该被自动包含,而不是手动的。

如果即使导入<ProductModuleName>-Swift.h后仍然看不到类。

确保你的类是inheritance一个本地类(例如UIViewController ),或者至less如果它只是一个工具类,使它的子类NSObject 。 你的class级现在应该显示。