You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 设置为 YES
  • Build 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:35:11