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

Swift 4项目中{Module_name}-Swift.h文件无法正常导出类成员求助

Swift 4 下 {Module_name}-Swift.h 未包含NSObject子类成员的解决方案

我之前也踩过Swift 4这个坑!跟Swift 3.2比,Swift 4对@objc的自动推断规则做了调整,这就是你遇到问题的核心原因,给你几个靠谱的解决办法:

  • 显式标注需要暴露的成员,或用@objcMembers批量处理
    Swift 4不再默认给NSObject子类的所有成员自动添加@objc修饰,你要么给每个需要暴露给Objective-C的变量/方法加上@objc,要么直接给整个类加上@objcMembers,这样所有成员都会自动被标记为可暴露给Obj-C。比如你的示例类可以改成:

    import Foundation
    
    @objcMembers
    class Utils: NSObject {
        let abc: String
        
        init(abc: String) {
            self.abc = abc
        }
        
        func someMethod() {
            // 方法实现
        }
    }
    
  • 检查访问权限
    即使加了@objc,如果成员的访问权限是internal(Swift默认),在生成的头文件里也可能不显示。要确保需要暴露的成员是public或open级别,比如:

    @objc public let abc: String
    
  • 验证项目配置
    去Build Settings里确认几个关键配置:

    • 找到Objective-C Generated Interface Header Name,确保文件名是{你的Module名}-Swift.h
    • 把Swift Compiler - Code Generation下的Install Objective-C Compatibility Header设为YES
  • 清理Xcode缓存
    Xcode的缓存有时候会抽风,试试按Cmd+Shift+K清理Build Folder,然后重启Xcode再重新编译,很多时候能解决这类自动生成文件的问题。

  • 正确导入头文件
    在需要调用Swift类的Objective-C文件里,一定要导入正确的头文件:

    #import "你的Module名-Swift.h"
    

    注意这个头文件只能在.m文件里导入,不要在.h文件里直接导入(如果需要在头文件里声明Swift类,用@class Utils;即可)


内容的提问来源于stack exchange,提问作者jawad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:07