■はじめに
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()