iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Mobile Development

我將成為Swift之強者系列 第 12

Day12 - 仿刻IOS鬧鐘實作:Realm 資料庫模型設計

  • 分享至 

  • xImage
  •  

Day12 - 仿刻IOS鬧鐘實作:Realm 資料庫模型設計

昨天我們完成了 留言板的最後實作,也正式告一段落
今天開始,我們要開啟新的主題 —— 鬧鐘 App,並從資料庫設計開始。

既然要做鬧鐘,首先一定要先思考:鬧鐘需要存哪些資訊?
這就是我們今天的主角:AlarmData


AlarmData.swift

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) 的操作囉 🚀


上一篇
Day 11 -留言板實作: MainTableViewCel
下一篇
Day13 - 仿刻 iOS 鬧鐘實作:AppDelegate 與通知權限設定
系列文
我將成為Swift之強者13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言