【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】UserDefaults(アプリ内DB)の設定方法からデータの保存・読み出し・削除まで徹底解説!

【Swift】UserDefaults(アプリ内DB)の設定方法からデータの保存・読み出し・削除まで徹底解説!
ふくしま

こんにちは〜株式会社メモリアインクの福嶋です!
記事をご覧いただきありがとうございます!

今回は、SwiftでUserDefaultsを効率的に活用する方法を初心者向けに段階的に解説していきます。

この記事を読んで分かること…
・UserDefaultsとは
・UserDefaultsの使い方(データの保存/データの読み出し/データの削除)
・カスタムオブジェクト(特定の目的や機能を持たせるために定義したオブジェクト)の保存方法
・UserDefaultsが適さない場面

目次

UserDefaultsとは?

UserDefaults(ユーザーデフォルト)は、キー値ペアの形式でデータを保存することができる、iOSアプリケーション開発で利用されるシステムです。主に、ユーザーの設定や軽量なデータ保存に使用されます。
非常に簡単に利用できるため、Swift開発者にとって最初のデータ永続化(データをアプリの再起動後も残すこと)の選択肢となります。

UserDefaultsの基本的な使い方

データの保存

UserDefaultsでデータを保存するには、まずUserDefaultsのインスタンスにアクセスし、適切なメソッドを呼び出してデータを保存します。

UserDefaults.standard.set(25, forKey: "Age")
UserDefaults.standard.set(true, forKey: "IsFirstLaunch")
UserDefaults.standard.set("John Doe", forKey: "UserName")

このコードは、年齢(Int)、最初の起動かどうか(Bool)、ユーザー名(String)をUserDefaultsに保存しています。set(_:forKey:)メソッドを使用してデータを保存し、それぞれのデータ型に応じた値を設定します。

データの読み出し

保存したデータを読み出すには、保存時に使用したキーを指定して、UserDefaultsから値を取得します。

let age = UserDefaults.standard.integer(forKey: "Age")
let isFirstLaunch = UserDefaults.standard.bool(forKey: "IsFirstLaunch")
let userName = UserDefaults.standard.string(forKey: "UserName") ?? "Guest"
print(age)
print(isFirstLaunch)
print(userName)

各メソッド(integer(forKey:)bool(forKey:)string(forKey:))は、指定したキーに対応するデータ型の値を返します。値が存在しない場合のデフォルト値も設定できます(string(forKey:)の場合はnilが返されるため、nil合体演算子??を使用してデフォルト値を”Guest”に設定しています)。

出力結果:

25
true
John Doe

データの削除

UserDefaultsからデータを削除するには、removeObject(forKey:)メソッドを使用します。

UserDefaults.standard.removeObject(forKey: "UserName")
let userName = UserDefaults.standard.string(forKey: "UserName") ?? "Guest"
print(userName)

このコードは、UserDefaultsから”UserName”キーに関連付けられたデータを削除します。

出力結果:

Guest

UserDefaultsを使った高度なテクニック

カスタムオブジェクトの保存

UserDefaultsでカスタムオブジェクトを保存するには、オブジェクトをData型にエンコードし、それをUserDefaultsに保存する必要があります。このプロセスにはCodableプロトコルが役立ちます。

struct User: Codable {
    var name: String
    var age: Int
}

let user = User(name: "John Doe", age: 30)
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(user) {
    UserDefaults.standard.set(encoded, forKey: "UserData")
}

if let savedUserData = UserDefaults.standard.data(forKey: "UserData") {
    let decoder = JSONDecoder()
    
    do {
        let user = try decoder.decode(User.self, from: savedUserData)
        print("ユーザー名: \(user.name), 年齢: \(user.age)")
    } catch {
        print("デコードに失敗しました。", error)
    }
}

この例では、User構造体を定義し、それをJSONにエンコードしてからUserDefaultsに保存しています。エンコードにはJSONEncoderを使用しています。
UserDefaultsからカスタムオブジェクトを取り出すには、保存したデータをData型で取得し、JSONデコーダーを使用して元のオブジェクト型にデコードします。

出力結果:

ユーザー名: John Doe, 年齢: 30

UserDefaultsのセキュリティ対策

UserDefaultsは平文でデータを保存するため、機密性の高い情報の保存には適していません。機密情報を保存する必要がある場合は、Keychainなどのよりセキュアなストレージソリューションを検討する必要があります。

まとめ

UserDefaultsは、Swiftでの軽量なデータ保存に非常に便利なツールですが、使用する際にはその特性と制限を理解しておくことが重要です。この記事が、SwiftにおけるUserDefaultsの効果的な使用方法についての理解を深めるのに役立てれば幸いです!

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

目次