iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
Software Development

iOS 學習筆記系列 第 25

Day25 Data Storage in iOS 01 - UserDefaults

Data Storage in iOS

數據持久性( Data Persistence ) 是將任何類型的數據存儲到本地端的機制,在本地存儲數據的能力,以便使用者下次打開應用程序時可以使用相同的數據而不會更改,接下來將介紹幾種最常見的數據存儲方式。參考文件

UserDefaults

讓我們從數據存儲中最簡單的 UserDefaults 開始, UserDefaults 用作鍵值存儲, 有特定的方法來檢索精確的數據類型(bool(forKey:)、int(forKey:)等)和 object(forKey) 來檢索 Any

UserDefaults 是一個 NSObject 子類,它為我們提供了同步讀取和寫入(在緩存級別)和異步持久化級別。

class UserRepository {
    enum Key: String, CaseIterable {
        case name, avatarData
        func make(for userID: String) -> String {
            return self.rawValue + "_" + userID
        }
    }
    let userDefaults: UserDefaults
    // MARK: - Lifecycle
    init(userDefaults: UserDefaults = .standard) {
        self.userDefaults = userDefaults
    }
    // MARK: - API
    func storeInfo(forUserID userID: String, name: String, avatarData: Data) {
        saveValue(forKey: .name, value: name, userID: userID)
        saveValue(forKey: .avatarData, value: avatarData, userID: userID)
    }
    
    func getUserInfo(forUserID userID: String) -> (name: String?, avatarData: Data?) {
        let name: String? = readValue(forKey: .name, userID: userID)
        let avatarData: Data? = readValue(forKey: .avatarData, userID: userID)
        return (name, avatarData)
    }
    
    func removeUserInfo(forUserID userID: String) {
        Key
            .allCases
            .map { $0.make(for: userID) }
            .forEach { key in
                userDefaults.removeObject(forKey: key)
        }
    }
    // MARK: - Private
    private func saveValue(forKey key: Key, value: Any, userID: String) {
        userDefaults.set(value, forKey: key.make(for: userID))
    }
    private func readValue<T>(forKey key: Key, userID: String) -> T? {
        return userDefaults.value(forKey: key.make(for: userID)) as? T
    }
}

建議使用 UserDefaults 來存儲用戶的偏好。 我們應該用它來存儲較零碎的訊息(例如,用戶是喜歡亮模式還是暗模式,他們想在什麼時間收到每日提醒,他們是否真的想收到通知等)


上一篇
Day24 URLSession 04 - DELETE
下一篇
Day26 Data Storage in iOS 02 - Keychain & Property list (Plists)
系列文
iOS 學習筆記30

1 則留言

0
juck30808
iT邦新手 2 級 ‧ 2021-10-12 18:36:33

恭喜大大即將完賽XD !!!

我要留言

立即登入留言