Swift函数未被自动生成的-Swift.h伞头文件包含,Objective-C无法调用类方法
解决Swift类方法无法在Objective-C伞头文件中显示的问题
我之前也碰到过一模一样的情况,核心问题在于你的Swift方法没有显式标记为可被Objective-C访问。虽然你的类已经继承了NSObject,但默认情况下Swift的实例方法不会自动暴露给Objective-C,按下面的步骤调整就能解决:
1. 给目标方法添加@objc修饰符
修改你的Swift类代码,给Hello()方法加上@objc关键字,这样它就会被自动收录到伞头文件中:
import Foundation @objc public class MySwiftClass: NSObject { @objc func Hello() -> String { return "Swift says hello!" } }
如果希望类里所有符合条件的方法都能被Objective-C访问,可以给类加上@objcMembers修饰符,省去逐个标记的麻烦:
import Foundation @objcMembers public class MySwiftClass: NSObject { func Hello() -> String { return "Swift says hello!" } }
2. 确认模块名与导入路径正确
在Objective-C文件中导入伞头文件时,要使用模块名的形式,比如:
#import <MyProductModuleName/MyProductModuleName-Swift.h>
这里的MyProductModuleName是你项目Target的Product Name,可以在Target的Build Settings -> Packaging -> Product Name里查看确认。
3. 清理缓存并重新构建项目
Xcode的缓存偶尔会导致伞头文件不更新,执行以下操作:
- 按下
Cmd + Shift + K清理Build Folder - 按下
Cmd + B重新构建项目
之后再查看MyProductModuleName-Swift.h,就能看到Hello()方法的声明了。
4. 检查关键Build Settings配置
确保以下两个配置无误:
Build Settings -> Packaging -> Defines Module设置为YESBuild Settings -> Swift Compiler - Code Generation -> Install Objective-C Compatibility Header设置为YES,同时确认Objective-C Generated Interface Header Name是MyProductModuleName-Swift.h
做完这些调整后,你就能在Objective-C里正常调用MySwiftClass的Hello()方法了。
内容的提问来源于stack exchange,提问作者Fedorov7890
相关产品推荐
相关产品推荐

