首页 文章

Realm中List的默认值

提问于
浏览
0

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

    不,您不需要为两个列表添加默认值,因为它们已经具有在Realm对象类定义中定义的空List的默认值 .

    let bumpLocations = List<BumpLocation>() 行中,括号create是用于在没有任何输入参数的情况下调用init方法的简写表示法,因此该行实际上为 bumpLocations 变量分配了一个空的 List .

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

相关问题