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 にデータを保存・取得する方法をご説明しました。