Swift - UserDefaults にデータを保存・取得する方法

ここでは、Swift で UserDefaults にデータを保存・取得する方法をご説明します。

UserDefaults とは?

iOS アプリ内で、データをデバイスに保存しておくには何通りか方法があります。

UserDefaults はその選択肢のひとつで、キー・バリューペアとしてデータを簡単にデバイスに保存・取得することができます。

アプリの設定データなど、小さめのデータを保存するのに適していて、アプリ内のどこからでも保存・取得できます。

大きいデータをデバイスに保存したい時は、Core Data や SQLite などを検討したほうが良いと思います。


UserDefaults にデータを保存・取得する方法

Swift で UserDefaults にデータを保存するには、set() メソッドを使います。

func set(Any?, forKey: String)
func set(Float, forKey: String)
func set(Double, forKey: String)
func set(Int, forKey: String)
func set(Bool, forKey: String)
func set(URL?, forKey: String)

Swift で UserDefaults からデータを保存するには、保存した値のデータ型に応じて以下のメソッドを使います。

func object(forKey: String) -> Any?
func url(forKey: String) -> URL?
func array(forKey: String) -> [Any]?
func dictionary(forKey: String) -> [String : Any]?
func string(forKey: String) -> String?
func stringArray(forKey: String) -> [String]?
func data(forKey: String) -> Data?
func bool(forKey: String) -> Bool
func integer(forKey: String) -> Int
func float(forKey: String) -> Float
func double(forKey: String) -> Double
func dictionaryRepresentation() -> [String : Any]

例えば、"UseLocation" というキーで、Bool の値を保存・取得したい時は次のようにできます。

// Save
UserDefaults.standard.set(true, forKey: "UseLocation")

// Retrieve
let useLocation = UserDefaults.standard.bool(forKey: "UseLocation")
print(useLocation) // true

"UserInfo" というキーで、Dictionary を保存したい時は次のようにできます。

// Save
let dict:[String : Any] = ["Name": "Suzuki", "Age": 15, "Gender": "M"]
UserDefaults.standard.set(dict, forKey: "UserInfo")

// Retrieve
if let userInfo = UserDefaults.standard.dictionary(forKey: "UserInfo") {
    print(userInfo) // ["Gender": M, "Age": 15, "Name": Suzuki]
}

自分で作った struct や class のインスタンスを値として保存したい時は、struct や class を定義するときに Codable をコンフォームしておいて、JSON データにエンコード・デコードして保存・取得できます。

次のような User struct のインスタンスを "UserData" というキーで保存・取得するには次のようにできます。

struct User: Codable {
    var UserID: Int
    var UserName: String
    var Age: Int
}
// Save
let user = User(UserID: 1, UserName: "Suzuki", Age: 15)
if let jsonData = try? JSONEncoder().encode(user) {
    UserDefaults.standard.set(jsonData, forKey: "UserData")
}

// Retrieve
if let data = UserDefaults.standard.data(forKey: "UserData") {
    if let userData = try? JSONDecoder().decode(User.self, from: data) {
        print(userData) // User(UserID: 1, UserName: "Suzuki", Age: 15)
    }
}

UserDefaults からデータを削除する方法

Swift で UserDefaults からデータを削除するには、removeObject() メソッドを使います。

func removeObject(forKey: String)

例えば、先ほど UserDefaults に作成した "UseLocation" のキーバリューペアを削除したい時は次のようにします。

UserDefaults.standard.removeObject(forKey: "UseLocation")

以上、Swift で UserDefaults にデータを保存・取得する方法をご説明しました。

© 2024 iOS 開発入門