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
相关产品推荐
相关产品推荐

