一尘不染

从Objective-C类调用Swift函数

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。o
ld:架构i386找不到符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)


阅读 262

收藏
2020-07-07

共1个答案

一尘不染

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

只需将<ProductModuleName>-Swift.h它包括在您的课程中,它就可以正常工作。

2020-07-07