web-dev-qa-db-ja.com

Swiftui:@appstorageプロパティラッパーとは何ですか

次の文を使用して、ログイン認証情報のような重要なアプリデータをUserDefaultsに保存するために使用しました。

UserDefaults.standard.set("[email protected]", forKey: "emailAddress")
 _

さて、私はSwiftuiが新しいプロパティラッパーを紹介したことを知ってきました:

@appstorage.

新しい機能がどのように機能するかを誰かが説明してください。

13
Shawkath Srijon

IOS 13の再実装とSwiffuiの場合

AdditonにPawello22222に答えます。 UserDefaultStorageとして名前を付けたAppStorageの再実装です。

@propertyWrapper
struct UserDefaultStorage<T: Codable> {
    private let key: String
    private let defaultValue: T

    private let userDefaults: UserDefaults

    init(key: String, default: T, store: UserDefaults = .standard) {
        self.key = key
        self.defaultValue = `default`
        self.userDefaults = store
    }

    var wrappedValue: T {
        get {
            guard let data = userDefaults.data(forKey: key) else {
                return defaultValue
            }
            let value = try? JSONDecoder().decode(T.self, from: data)
            return value ?? defaultValue
        }
        set {
            let data = try? JSONEncoder().encode(newValue)
            userDefaults.set(data, forKey: key)
        }
    }
}
 _

このラッパーは、/復元**/**/**/**=// o./of overデフォルトを保存できます。また、IOS 13で動作し、IT=/=/= SwiftUIをインポートする必要があります。

使用法

@UserDefaultStorage(key: "myCustomKey", default: 0)
var myValue: Int
 _

それはStateとして直接使用することはできません

1