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

Swift头文件非ASCII字符报错:Objective-C项目集成Swift自定义视图问题

解决Swift自定义UIView(含TextView代理)接入非英文模块名Objective-C项目的非ASCII字符错误

我之前也碰到过一模一样的情况——项目模块名是非英文,把带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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:25:19