领域中列表的默认值

时间:2017-09-12 14:11:14

标签: ios swift realm

我有一个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)

在创建这些对象时,没有值要添加到属性bumpLocationsbrakeLocations。所以我需要为这些字段添加默认值,对吗?

类型List的属性的默认值是什么?

我在realm.create遇到了崩溃。我认为这是因为create函数期望模型类的所有属性在类中以与在类中指定的方式相同的方式列出。因为它缺少bumpLocationsbrakeLocations,它会从值字典中弄清楚类的创建顺序?正如它将distance字段的值添加到bumpLocations属性并将calories值添加到brakeLocations属性等等。

我得到的崩溃报告。

Report #1

Report 2

在调试控制台中获得此output

1 个答案:

答案 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)
}