更新对象时清除Realm中的:Date字段

时间:2019-01-07 11:45:44

标签: swift realm

我有以下数据模型

@objc dynamic var uid = UUID().uuidString;
@objc dynamic var completed: Bool = false;
@objc dynamic var dateCompleted: Date?;

当我创建一个新对象时,它具有nil的{​​{1}},然后当用户完成任务时,我尝试像这样用dateCompleted更新对象

primaryKey (uid)

我在let query = realm.objects(Tasks.self).filter("uid = %@", id).first!; if query.completed == false { var date = Date(); } else { var date: Date = nil } let wayUpdate = ["uid": id, "completed": !query.completed, "dateCompleted": date] as [String : Any] do { try realm.write { realm.create(WaysData.self, value: wayUpdate, update: true) } } catch { print("Error adding update to experience! \(error)"); } 中收到以下错误Cannot convert value of type 'String' to specified type 'Date'

我的问题是-是否可以将完成更新为false时清除日期,还是应该在用户每次完成/未完成/完成任务时仅将else block保留为dateCompleted,每当我要将完成按钮的标签更新为“完成”或“恢复”时,都要检查Date()值吗?

1 个答案:

答案 0 :(得分:0)

如果您只是想更新Object子类实例的单个属性,请不要调用create,只需在写事务中修改该单个属性即可。

do {
    try realm.write {
        query.dateCompleted = query.completed ? nil : Date()
    }
} catch {
    print("Error adding update to experience! \(error)")
}

您还应该使用主键来检索对象,不要过滤查询。

let query = realm.object(ofType: Tasks.self,forPrimaryKey: id)

与您的问题无关,但您不应在Swift的行尾使用;,这不是Objective-C。