首页 > 解决方案 > 更新对象时清除:领域中的日期字段

问题描述

我有以下数据模型

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

当我为它创建一个新对象nildateCompleted,当用户完成任务时,我尝试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'else block.

我的问题是 - 有没有办法在将完成更新为 false 时清除日期,或者我应该dateCompletedDate()每次用户完成/未完成/完成任务时离开,并completed: Bool在我想更新完成时检查值按钮的标签是“完成”还是“复活”?

标签: swiftrealm

解决方案


如果您只想更新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。


推荐阅读