技術ブログ

プログラミング、IT関連の記事中心

UserDefaultsの処理をまとめて保守性が高いUserDefaultsの書き方【Swift】

■はじめに

UserDefaultsの処理を保守性を高く記載しようと思って、色々と試行錯誤しました。

ここで紹介する方法は一例ですので、参考にしてください。

(Keyを定数クラスで管理するなども考えましたが、保守するクラスが増えるだけでしたので断念。)

■手順

UserDefaultsの処理をまとめるクラス「UserDefaults+MyApp.swift」を作成してください。(ファイル名は任意)

まずは、一例として、以下のコードを丸々コピペで「UserDefaults+MyApp.swift」に貼り付けてください。

import Foundation

// UserDefaultsの拡張クラス
extension UserDefaults {
    // UserDefaultsのKeyをまとめたenum
    private enum UDKey: String {
        case keyOne
        case keyTwo
    }
    
    // データの全件削除処理
    func removeAllObject() {
        removeObject(forKey: UDKey.keyOne.rawValue)
        removeObject(forKey: UDKey.keyTwo.rawValue)
    }
    
    // 「keyOne」のセッターゲッターの処理
    var keyOne: String? {
        get {
            return string(forKey: UDKey.keyOne.rawValue)
        }
        set(val) {
            set(val, forKey: UDKey.keyOne.rawValue)
        }
    }

    // 「keyTwo」のセッターゲッターの処理
    var keyTwo: Bool {
        get {
            return bool(forKey: UDKey.keyTwo.rawValue)
        }
        set(val) {
            set(val, forKey: UDKey.keyTwo.rawValue)
        }
    }
}

上記のサンプルは「String」「Bool」の2種類の型のUserDefaultsの定義をしています。

UserDefaultsの「Key」は「UDKey」のenumにまとめて定義しています。

setterとgetterでKeyの処理を書いているので、以下のように利用できます。

// 取得する場合
print(UserDefaults.standard.keyOne)
print(UserDefaults.standard.keyTwo)

// 値を設定する場合
UserDefaults.standard.keyOne = "きー1"
UserDefaults.standard.keyTwo = true

// データを全件削除する場合
UserDefaults.standard.removeAllObject()