← All repositories

listless

A simple list app for Apple platforms

git clone https://code.inqk.net/listless.git


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)
         }
     }
 }