diff --git a/ProjectClock/AlarmActivator.swift b/ProjectClock/AlarmActivator.swift index b873797..acb0b42 100644 --- a/ProjectClock/AlarmActivator.swift +++ b/ProjectClock/AlarmActivator.swift @@ -56,8 +56,11 @@ class AlarmActivator: UITabBarController guard let alarm = alarms.listActivating.first else { return } // Update alarm info - alarm.lastActivate = Date() - if alarm.oneTime { alarm.enabled = false } + alarm.apply { + $0.lastActivate = Date() + if $0.oneTime { $0.enabled = false } + } + alarms.localSave() // Segue diff --git a/ProjectClock/Models.swift b/ProjectClock/Models.swift index e3a73e8..6982ccb 100644 --- a/ProjectClock/Models.swift +++ b/ProjectClock/Models.swift @@ -100,13 +100,13 @@ class Alarms: Codable var list: [Alarm] = [] /// Save alarms to local storage - func localSave() -> Alarms { localStorage.setValue(JSON.stringify(list)!, forKey: "alarms"); return self } + func localSave() { localStorage.setValue(JSON.stringify(list)!, forKey: "alarms") } /// Read alarms from local storage - func localRead() -> Alarms { list = JSON.parse([Alarm].self, localStorage.string(forKey: "alarms")!)!; return self } + func localRead() { list = JSON.parse([Alarm].self, localStorage.string(forKey: "alarms")!)! } /// Read an alarm object from local storage - static func fromLocal() -> Alarms { return Alarms().localRead() } + static func fromLocal() -> Alarms { return Alarms().apply { $0.localRead() } } /// Get enabled alarms var listEnabled: [Alarm] { return list.filter { $0.enabled } } diff --git a/ProjectClock/Utils.swift b/ProjectClock/Utils.swift index 641e94e..510423c 100644 --- a/ProjectClock/Utils.swift +++ b/ProjectClock/Utils.swift @@ -77,3 +77,17 @@ extension TimeInterval else { return "\(seconds)s" } } } + +/// Apply like Kotlin +protocol HasApply {} +extension HasApply +{ + @discardableResult + func apply(_ c: (Self) -> ()) -> Self + { + c(self) + return self + } +} +extension Alarm: HasApply {} +extension Alarms: HasApply {}