swift - 更新对象时清除:领域中的日期字段
问题描述
我有以下数据模型
@objc dynamic var uid = UUID().uuidString;
@objc dynamic var completed: Bool = false;
@objc dynamic var dateCompleted: Date?;
当我为它创建一个新对象nil
时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'
在else block
.
我的问题是 - 有没有办法在将完成更新为 false 时清除日期,或者我应该dateCompleted
在Date()
每次用户完成/未完成/完成任务时离开,并completed: Bool
在我想更新完成时检查值按钮的标签是“完成”还是“复活”?
解决方案
如果您只想更新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。
推荐阅读
- c++ - MSVC 模板化 lambda 函数参数包失败
- jquery - 使用 Vue 和 element ui 添加不同类型的列
- c# - 如何在 IIS 中获取基于站点的 ApplicationPool 对象
- python - 准确率高但预测错误
- applescript - 如何检查号码是否已在 iMessage 中注册?
- javascript - Nodemailer 在本地环境中工作,但不是我居住的网站
- python - 修复这个错误?TypeError:“builtin_function_or_method”类型的参数不可迭代
- java - Convension for debug string and representation string
- r - 从 R 中的列表中打印出具有不同嵌套级别的项目
- ios - UIViewRepresentable.updateUIView(_:context:) 在@State、@Binding 或@EnvironmentObject 改变时不会被调用