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

