0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Swift] AppStorageとUserDefaultsについて

Last updated at Posted at 2024-11-02

1. AppStorageとUserDefaultsの概要

AppStorageは、SwiftUIで使える便利な仕組みで、@プロパティラッパーとして簡単にユーザーデフォルトにデータを保存したり読み込んだりできます。UserDefaultsを裏で使っているため、SwiftUIのコードがよりシンプルに書けます。

UserDefaultsは、アプリ全体でKey-Valueの形でデータを保存できる仕組みです。アプリを再起動しても保存したデータを保持して、自動的に読み込むことができます。

つまり、AppStorageもUserDefaultsも基本的な機能は同じですが、AppStorageの方がSwiftUIと組み合わせて使うときにコードがスッキリするのが特徴です。

2. 基本データ型とサポート内容

AppStorageがサポートする基本データ型:

  • Bool、String、Data、Int、Double、URL
  • RawRepresentableに準拠し、RawValueがStringまたはIntの型も保存可能

UserDefaultsも多くの型をサポートしますが、保存できるデータは基本的にPlist形式(NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary)のみです。

3. 使い方の簡単な例

// AppStorageの使用例
struct ContentView: View {
    @AppStorage("username") private var username: String = "ゲスト"

    var body: some View {
        VStack {
            Text("こんにちは、\(username)さん!")
            Button("名前を変更") {
                username = "田中"
            }
        }
    }
}

// UserDefaultsの使用例
struct ContentView: View {
    @State private var username: String = UserDefaults.standard.string(forKey: "username") ?? "ゲスト"

    var body: some View {
        VStack {
            Text("こんにちは、\(username)さん!")
            Button("名前を変更") {
                username = "田中"
                UserDefaults.standard.set(username, forKey: "username")
            }
        }
    }
}

4. 読み取り時の注意事項

読み取り時の注意事項 UserDefaultsから値を読み取るとき、BoolやIntにはデフォルトの戻り値があるため、指定したキーが存在しない場合でもfalseや0が返されます。

5. その他のデータ保存手法

手法 機能 適用データ 特徴
UserDefaults Key-Value型 小規模なデータ 素早いアクセスが可能。
ただしセキュリティ面には注意が必要。
FileManager ファイル保存 大規模または複雑なデータ 柔軟性が高いが、ファイル管理がやや複雑。
CoreData SQLiteを使用 リレーショナルデータ データの検索・操作が容易で、
複雑な構造にも対応可能。
KeyChain セキュア保存 パスワードやトークン 安全性が高く、機密情報の保存に最適。

注意事項

  • UserDefaults は基本的に小規模な設定データを保存するのに向いており、読み取り時にBoolやIntのデフォルト値が返されるため注意が必要です。
  • FileManager はファイル単位でのデータ管理が可能ですが、ファイルパスやアクセス権限の管理を慎重に行う必要があります。
  • CoreData は複雑なデータ構造やリレーショナルデータの保存に適しており、データの検索やフィルタリングが容易です。
  • KeyChain はセキュリティの高い情報(例:パスワード、認証トークン)の保存に使用され、iOSデバイス間の共有も可能です。

結論

小規模な設定や状態管理にはAppStorageやUserDefaultsを使用し、注意が必要な場面では戻り値や型の特性を考慮しましょう。
セキュリティが求められるデータはKeyChainを、複雑なデータ構造や大量のデータ保存にはCoreDataを使い分けることが重要です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?