CoreData中Integer 32 Scalar属性与Swift Int类型匹配报错如何解决?
CoreData Int32属性与Swift Int类型不匹配警告解决方案
问题根源
- Swift 中的
Int是平台相关类型,在当前所有主流Apple设备上均为64位长度(即Int64),和你在CoreData模型中配置的32位整数类型不一致。 - CoreData默认不会做隐式的类型强制转换,警告的目的是提示你隐式转换可能存在数据溢出丢失的风险,不推荐直接使用不匹配的类型声明。
最优实现方案
通过私有存储属性对接CoreData模型,公开计算属性对外提供Int类型接口,无需业务侧手动做类型转换,同时保留32位存储的空间优势:
@objc(Character) class Character: WHNSManagedObject { // 私有存储属性,和CoreData模型配置的Integer 32类型严格匹配 @NSManaged private var rawLevel: Int32 } // 对外暴露业务层使用的接口 extension Character { var level: Int { get { Int(rawLevel) } set { rawLevel = Int32(newValue) } } }
注意事项
- 业务侧直接访问
level属性即可,所有类型转换逻辑已经在内部封装完成。 Int32的取值范围为-2147483648到2147483647,完全覆盖角色等级的常规业务取值区间,不会出现溢出问题。
内容的提问来源于stack exchange,提问作者TheMile133
相关产品推荐
相关产品推荐

