ユーザーdefaultsへのオブジェクトの保存


UserDefaultは、大量のデータや複雑なオブジェクトを保持するためのものではありません.そのためにcoredataを使います.
しかし、ねえ、時々、我々はちょうどその怠惰です

最近、私のTwitterの友人は、ユーザdefaultsにオブジェクトを保存する方法を尋ねました、そして、彼はこの拡張子が好きであるようでした.
あなたは彼が同様に店でアプリを知っていましたか?それをチェックしてください
だから、気をつけないでくださいし、それに権利を取得します.背中の静か!🤫

ルンバスター 準備🧩


まず、私たちが保存するオブジェクトを作成しましょう.あなたがアプリケーションで使用できる単純なオブジェクト.
struct UserSettings: Codable {
    var userID: Int?
    var modePreference: String?
    var volumeLevel: Int?
    var highScore: Int?

    enum CodingKeys: String, CodingKey {
        case userID = "id"
        case modePreference = "mode_preference"
        case volumeLevel = "volume_level"
        case highScore = "highscore"
    }
}
私は、あなたが同様にサーバーからその情報を得ている場合、それらのcodingkeysをボーナスとして加えました.そして、Snakestraケースは昨年sooooです.オーマライト?
今、私たちは私たちはいくつかのユーザーに保持することができます素敵なユーザー設定を得た.設定?🥁
ユーザーがいくつかの情報を変更する場合は、これは本当に便利ですが、Wi - Fiまたは他の種類のインターネット接続を持っていないので、このオブジェクトに保持することができますし、後の日付でそれを送ってください.
次に、これは義務的ではありません、我々はすべてのキーを保持する別々のオブジェクトを作成します.私は一度キーのための手入力文字列を使用してミスを犯した.二度と.悪夢
struct Keys {
    static let userSettings = "userSettings"
}

実行🤯🔫


節約


ここに面白いビットが来る.オブジェクトをユーザーdefaultsに保存する拡張子を作成しましょう.
extension UserDefaults {

static func saveUserSettings(_ settings: UserSettings) {
    do {
        let encodedUserSettings = try JSONEncoder().encode(settings)
        UserDefaults.standard.set(encodedUserSettings, forKey: Keys.userSettings)
        UserDefaults.standard.synchronize() // this line is a joke btw, read the summary, so awesome :) 
    } catch {
        print("Error saving User Settings.")
    }
}

//... loading code goes here

}
それはthats!
非常に簡単右?今、あなたはなぜいくつかの開発者(自分自身)は本当に、後で使用するためにいくつかの小さなオブジェクトを保存する、この迅速かつ汚れた方法を使用するのが大好き知っている.

読み込み


上記と同じですが、逆に⏪
//... saving code

static func loadUserSettings() -> UserSettings? {
    guard let settings = UserDefaults.standard.object(forKey: Keys.userSettings),
          let loadedSettings = settings as? Data else {
        return nil
    }
    return try? JSONDecoder().decode(UserSettings.self, from: loadedSettings)
}
唯一の違いはここで私たちのリターンはオプションです.多分、我々はまだ何も救わなかったでしょう🤷‍♂️
怠惰に関するすべてのジョークを脇に、念頭に置いて、ユーザーdefaultsのサイズは、アプリケーションの読み込み時間に影響を与えるだけで小さいオブジェクトのために使用する必要があります.また、ユーザのパスワードを保存する巨大なno - noです.
希望は、あなたの将来のコーディングの努力に役立つ!
読んでくれてありがとう、素敵な人!♥️ さえずりましょう.