昨天我們完成了 留言板的最後實作,也正式告一段落
今天開始,我們要開啟新的主題 —— 鬧鐘 App,並從資料庫設計開始。
既然要做鬧鐘,首先一定要先思考:鬧鐘需要存哪些資訊?
這就是我們今天的主角:AlarmData
。
import Foundation
import RealmSwift
class AlarmData: Object {
@Persisted var alarmTime: String = "" // 鬧鐘要響的時間
@Persisted var creatTime: String = "" // 創建鬧鐘的時間,方便排序
@Persisted var name: String = "" // 鬧鐘名稱,例如:睡覺、工作
@Persisted var repeatDays: List<Bool> = List<Bool>() // 一週七天的重複設定
@Persisted var sound: String = "" // 鬧鐘鈴聲
@Persisted var isEnabled: Bool = true // 開關控制
@Persisted var snoozeEnabled: Bool = true // 是否啟用稍後提醒
@objc dynamic var isOn: Bool = true // 程式邏輯用,不存入資料庫
// 便利建構子
convenience init(alarmTime: String, creatTime: String, name: String, repeatDays: [Bool] = Array(repeating: false, count: 7), sound: String, snoozeEnabled: Bool = true) {
self.init()
self.alarmTime = alarmTime
self.creatTime = creatTime
self.name = name
self.sound = sound
self.repeatDays.append(objectsIn: repeatDays)
self.snoozeEnabled = snoozeEnabled
}
}
alarmTime
:存放響起的時間,例如 "07:30"
。creatTime
:建立的時間,方便排序。name
:自訂名稱,例如「睡覺」、「運動」。repeatDays
:用 List<Bool>
記錄一週七天是否重複,例如 [true, false, true, …]
。sound
:記錄使用者選的鈴聲名稱。isEnabled
:判斷是否啟用這個鬧鐘。snoozeEnabled
:是否啟用「稍後提醒」。isOn
:程式邏輯使用,支援 KVO,不存入資料庫。let alarm = AlarmData(
alarmTime: "07:30",
creatTime: "2025-09-21 10:00",
name: "上班",
repeatDays: [true, false, true, false, true, false, false],
sound: "morning_tone",
snoozeEnabled: true
)
今天我們完成了 AlarmData 模型設計,把鬧鐘需要的資訊都整理進資料庫物件裡。
接下來,我們就能利用這個模型去做 新增、查詢、更新、刪除(CRUD) 的操作囉 🚀