listless

A simple list app for Apple platforms
Log | Files | Refs | README | LICENSE

commit c9228cad41e191d8d4e247c1d62a5e71279f8b6b
parent e82df68743c94eb5bd70cf004b9d1f900233e89c
Author: Michael Camilleri <[email protected]>
Date:   Thu, 19 Feb 2026 05:25:37 +0900

Use type-checked keys

Co-Authored-By: Codex GPT 5.3 <[email protected]>

Diffstat:
MListless/Models/TaskItem.swift | 29+++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/Listless/Models/TaskItem.swift b/Listless/Models/TaskItem.swift @@ -3,6 +3,19 @@ import Foundation @objc(TaskItem) public class TaskItem: NSManagedObject, Identifiable { + private enum Keys { + private static func key<Value>(_ keyPath: KeyPath<TaskItem, Value>) -> String { + NSExpression(forKeyPath: keyPath).keyPath + } + + static let id = key(\TaskItem.id as KeyPath<TaskItem, UUID>) + static let title = key(\TaskItem.title) + static let isCompleted = key(\TaskItem.isCompleted) + static let createdAt = key(\TaskItem.createdAt) + static let updatedAt = key(\TaskItem.updatedAt) + static let sortOrder = key(\TaskItem.sortOrder) + } + @NSManaged public var id: UUID @NSManaged public var title: String @NSManaged public var isCompleted: Bool @@ -16,18 +29,18 @@ public class TaskItem: NSManagedObject, Identifiable { public override func awakeFromInsert() { super.awakeFromInsert() - setPrimitiveValue(UUID(), forKey: "id") - setPrimitiveValue(Date(), forKey: "createdAt") - setPrimitiveValue(Date(), forKey: "updatedAt") - setPrimitiveValue(false, forKey: "isCompleted") - setPrimitiveValue("", forKey: "title") - setPrimitiveValue(0, forKey: "sortOrder") + setPrimitiveValue(UUID(), forKey: Keys.id) + setPrimitiveValue(Date(), forKey: Keys.createdAt) + setPrimitiveValue(Date(), forKey: Keys.updatedAt) + setPrimitiveValue(false, forKey: Keys.isCompleted) + setPrimitiveValue("", forKey: Keys.title) + setPrimitiveValue(0, forKey: Keys.sortOrder) } public override func willSave() { super.willSave() - if !isDeleted && changedValues().keys.contains(where: { $0 != "updatedAt" }) { - setPrimitiveValue(Date(), forKey: "updatedAt") + if !isDeleted && changedValues().keys.contains(where: { $0 != Keys.updatedAt }) { + setPrimitiveValue(Date(), forKey: Keys.updatedAt) } } }