SwiftUI でデータを保存するには、これまで通り UserDefaults が使えますが、SwiftUI では @AppStorage というキーワードを付加した変数でこれと同じことが行えます。
@AppStorage 変数はデータ保存だけでなく、@State 変数と同じように View に対して更新を即座に反映することができます。
早速、使用例を紹介します。
@AppStorageでデータを永続化(端末保存)する
ボタンをタップして整数をカウントする例です。
struct ContentView: View {
@AppStorage("IntegerKey") var counter = 0
var body: some View {
Text("Count: \(counter)")
Button("タップしてインクリメント") {
counter += 1
}
}
}
再度起動し直して、カウント後の値で再開していることが確認できるはずです。
配列や辞書型、独自データ形式の保存には対応していない
2021/01時点での SwiftUI バージョンで保存できるのは以下のデータのみです。
- 整数(Int)
- 浮動小数点数(Double)※Floatは不可
- 文字列(String)
- 真偽値(Bool)
- バイナリ(Data)
@AppStorage の実体は UserDefaults
@AppStorage 変数の値は、実は UserDefaults に保存されています。
先ほどの使用例のカウンタを UserDefaults から表示してみると同じ値が確認できるはずです。
struct ContentView: View {
@AppStorage("IntegerKey") var counter = 0
var body: some View {
Text("UserDefaultから確認: \(UserDefaults.standard.integer(forKey: "IntegerKey"))")
Button("タップしてインクリメント") {
counter += 1
}
}
}
UserDefaults の値はViewに更新を伝えられないので、この状態でボタンをタップしても表示は変わりませんが、再度起動し直すとデータが更新されていることが確認できるはずです。
以上
コメントを残す