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

Swift转换Objective-C的uint32_t类型NS_ENUM为UInt32报错求助

问题分析与解决

你遇到的错误是因为Swift将OC的NS_ENUM映射为带原始值的Swift枚举类型,而枚举实例本身不能直接传入UInt32的初始化器——Swift找不到适配枚举类型的UInt32构造方法,因此误尝试匹配接受StringProtocol的init(_:radix:)初始化器,从而抛出错误。

正确的转换方式

直接使用枚举的rawValue属性即可,因为OC中NS_ENUM的底层类型是uint32_t,对应Swift的UInt32,枚举的rawValue就是该类型的值:

let uintType: UInt32 = type.rawValue

如果需要显式构造(虽然没必要,因为rawValue已经是UInt32类型),也可以写:

let uintType = UInt32(type.rawValue)

为什么原写法错误

UInt32(_:)初始化器仅接受遵循BinaryInteger协议的类型,而Swift枚举实例本身并不符合该协议,因此Swift会尝试寻找其他可用的初始化器,最终匹配到了需要StringProtocol类型的init(_:radix:),这才出现了错误提示中要求EXType遵循StringProtocol的奇怪报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:11