我有一个旧的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");
    }
    
}

现在我试着遵循文档here,在<...>-Swift.h文件中我写了这个

@class System;

@interface System : NSObject

-(void)printSome;

@end

我已经在我的Objective-C类中导入了它.此时,在我的Objective-C代码的Objective C类(当前为UIViewController)中,我try 调用"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$_系统",

推荐答案

问题解决了,我之前在Objective-C<ProductModuleName>-Swift.h中创建并包含了一个新的.h文件,但正如我后来发现的,这一步不是必需的,因为编译器创建了必需的文件.

只要在你的课堂上加入<ProductModuleName>-Swift.h个,它就会起作用.

Swift相关问答推荐

输出NSView到png

try 编写复杂的断言时出现编译器错误

动画过程中的SwiftUI重绘视图

按变换zoom 在UIView中不起作用

我可以在预览中通过拖动手势跳转,但在模拟器中失败

字典下标或运算符,如果密钥不存在,则添加指定的默认&值是SWIFT?

在一行语句中比较Date.now的相等性是否安全

调度组是否阻止iOS中的主线程?

在Equatable上引用运算符函数==要求Dictionary.Values符合Equatable

memcpy 复制带偏移量的数组

是否有一个带有空初始值设定项的 Swift 类/ struct 的标准协议

在主要参与者中启动分离任务和调用非隔离函数之间的区别

您是否必须手动指定您的 DispatchQueue 是串行的?

Swift UI 不重绘 NSViewRepresentable 包装的文本字段

如何根据 SwiftUI 中的字体大小定义按钮的大小?

如何在 Swift 中将 XPC 自定义类列入白名单?

Apple 的自然语言 API 返回意外结果

Swift中的分段错误

What is "SwiftPM.SPMRepositoryError error 5"?

subscribeOn 和 observeOn 的顺序重要吗?