我遇到了一个问题,即使用可选字符串将 SwiftData 对象上的属性设置为
Codable
结构会导致应用程序崩溃。
例如,如果我有以下模型对象和结构:
@Model
final class Item {
var timestamp: Date
var codableProp: CodedValue?
init(timestamp: Date, cProp: CodedValue?) {
self.timestamp = timestamp
self.codableProp = cProp
}
}
struct CodedValue: Codable{
var string0: String? = nil
var bool0: Bool? = nil
var bool1: Bool? = nil
}
如果我使用以下 JSON 创建
CodedValue
的实例,应用程序会崩溃:
{
"bool0": true
}
我收到的具体错误是:
“无法将‘Swift.Optional
’(0x1c1e3f000)类型的值转换为‘Swift.String’(0x1c1e37e30)”
崩溃似乎发生在
@Model
宏中的某个地方:
我在这里找到了解决方案: 快速数据崩溃解决方案
将
@Model
装饰器添加到所有模型中。并且不要在 CodedValue
构造函数中分配 Item
模型。因为您的应用程序可能会崩溃。这只是一个 SwiftData 错误。
let codedValue = CodedValue(string0: "", bool0: false, bool1: false)
let item = Item(timestamp: Date.now)
item.codableProp = codedValue