我有一个Realm模型类,如下所示。
class Trip: Object {
dynamic var userId: String = ""
dynamic var id: Int = 0
dynamic var startTimestamp: Int64 = 0
dynamic var endTimestamp: Int64 = 0
let bumpLocations = List<BumpLocation>()
let brakeLocations = List<BrakeLocation>()
dynamic var distance: Double = 0.0
dynamic var calories: Double = 0.0
dynamic var averageSpeed: Double = 0.0
}
我像这样创建这个对象。
let tripData: [String: Any] = [
"userId": self.trip!.userId,
"id": self.trip!.id,
"startTimestamp": self.trip!.startTimestamp,
"endTimestamp": self.trip!.endTimestamp,
"distance": self.trip!.distance,
"calories": self.trip!.calories,
"averageSpeed": self.trip!.averageSpeed
]
realm.create(Trip.self, value: tripData, update: true)
在创建这些对象时,没有值要添加到属性bumpLocations
和brakeLocations
。所以我需要为这些字段添加默认值,对吗?
类型List
的属性的默认值是什么?
我在realm.create
遇到了崩溃。我认为这是因为create
函数期望模型类的所有属性在类中以与在类中指定的方式相同的方式列出。因为它缺少bumpLocations
和brakeLocations
,它会从值字典中弄清楚类的创建顺序?正如它将distance
字段的值添加到bumpLocations
属性并将calories
值添加到brakeLocations
属性等等。
我得到的崩溃报告。
在调试控制台中获得此output。
答案 0 :(得分:0)
不,您不需要为这两个列表添加默认值,因为它们已经具有在Realm对象类定义中定义的空List的默认值。
在行let bumpLocations = List<BumpLocation>()
中,括号创建的是用于调用不带任何输入参数的init方法的简写符号,因此该行实际上为List
变量指定了一个空bumpLocations
。 / p>
class Trip: Object {
...
let bumpLocations = List<BumpLocation>()
let brakeLocations = List<BrakeLocation>()
}
以下代码完全有效。
let tripData: [String: Any] = [
"userId": self.trip!.userId,
"id": self.trip!.id,
"startTimestamp": self.trip!.startTimestamp,
"endTimestamp": self.trip!.endTimestamp,
"distance": self.trip!.distance,
"calories": self.trip!.calories,
"averageSpeed": self.trip!.averageSpeed,
]
try! realm.write {
realm.create(Trip.self, value: tripData)
}