Swift头文件非ASCII字符报错:Objective-C项目集成Swift自定义视图问题
我之前也碰到过一模一样的情况——项目模块名是非英文,把带TextView代理的Swift UIView加到OC项目里就炸出非ASCII字符错误,改SWIFT_EXTENSION模块名根本没用。给你几个亲测有效的解决步骤:
统一模块名为纯英文
直接去Target的Build Settings里,把Product Module Name和SWIFT_MODULE_NAME都改成纯英文(比如把“我的项目”改成MyCustomProject)。这一步是核心,因为非英文模块名会让自动生成的-Swift.h头文件里出现编码混乱的字符。之后在OC文件里导入头文件时,用#import "MyCustomProject-Swift.h"就对了。清理缓存并重新生成Swift桥接头文件
先按Cmd+Shift+K清理项目,再去Xcode偏好设置的Locations里找到Derived Data,删掉对应项目的缓存文件夹。重新编译项目,让系统生成全新的-Swift.h头文件,这时候打开这个头文件检查,应该已经没有非ASCII字符了。确保TextView代理正确暴露给OC
你的Swift UIView里的TextView代理方法和自定义协议,必须用@objc修饰才能被OC识别:// 自定义代理协议 @objc protocol CustomTextViewDelegate: UITextViewDelegate { @objc optional func textViewDidFinishEditing(_ textView: UITextView) } // Swift UIView类 @objcMembers class CustomTextViewWrapper: UIView { weak var delegate: CustomTextViewDelegate? func setupTextView() { let textView = UITextView() textView.delegate = self addSubview(textView) } } // 实现TextView代理方法 extension CustomTextViewWrapper: UITextViewDelegate { @objc func textViewDidChange(_ textView: UITextView) { delegate?.textViewDidChange?(textView) } }检查编码相关Build Settings
在Build Settings里搜索“encoding”,把Character Encoding设置成UTF-8;再找到Compile Sources As,设置为According to File Type,确保编译器能正确解析所有字符编码。
内容的提问来源于stack exchange,提问作者Kishore Kumar

