我有以下数据模型
@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()
值吗?
答案 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。