使用@AppStorage 进行字符串映射
Using @AppStorage for string map
如何在 SwiftUI 应用程序中使用 @AppStorage
作为字符串映射?
这就是我想要做的:
@AppStorage("ratings") var ratings: [String: Double] = []
但这给了我错误信息“在调用初始化程序时没有完全匹配”。查看文档时,似乎只支持几种数据类型。可以将其编码为 Data
?
查看 @AppStorage
的 documentation,您当前可以使用此 属性 包装器存储的唯一值是
Int
Double
String
Bool
URL
Data
及其可选的对应项。您还可以存储符合 RawRepresentable
的值,例如符合 Int
或 String
.
的枚举
如果您想使用此方法存储字典,则必须将其转换为数据并以这种方式存储。
@AppStorage("ratings")
var ratings: Data = Data() // we need to initialize it with something
然后我们可以使用
保存到它
let data = ["Hello": 5.0]
guard let ratings = try? JSONEncoder().encode(data) else { return }
self.ratings = ratings
如果我们想要检索它,我们可以执行以下操作:
guard let decodedRatings = try? JSONDecoder().decode([String:Double].self, from: ratings) else { return }
print(decodedRatings)
否则你将不得不直接使用UserDefaults,你总是可以使用onChange
和State来管理它。请参阅有关如何使用 onChange
的 example。您可能需要为您的视图创建一个自定义初始化,以便从 UserDefaults 中填充 State 值。
虽然您可以编写自己的 属性 包装器,但 John Sundell 的这篇 article 详细解释了如何做。
如何在 SwiftUI 应用程序中使用 @AppStorage
作为字符串映射?
这就是我想要做的:
@AppStorage("ratings") var ratings: [String: Double] = []
但这给了我错误信息“在调用初始化程序时没有完全匹配”。查看文档时,似乎只支持几种数据类型。可以将其编码为 Data
?
查看 @AppStorage
的 documentation,您当前可以使用此 属性 包装器存储的唯一值是
Int
Double
String
Bool
URL
Data
及其可选的对应项。您还可以存储符合 RawRepresentable
的值,例如符合 Int
或 String
.
如果您想使用此方法存储字典,则必须将其转换为数据并以这种方式存储。
@AppStorage("ratings")
var ratings: Data = Data() // we need to initialize it with something
然后我们可以使用
保存到它let data = ["Hello": 5.0]
guard let ratings = try? JSONEncoder().encode(data) else { return }
self.ratings = ratings
如果我们想要检索它,我们可以执行以下操作:
guard let decodedRatings = try? JSONDecoder().decode([String:Double].self, from: ratings) else { return }
print(decodedRatings)
否则你将不得不直接使用UserDefaults,你总是可以使用onChange
和State来管理它。请参阅有关如何使用 onChange
的 example。您可能需要为您的视图创建一个自定义初始化,以便从 UserDefaults 中填充 State 值。
虽然您可以编写自己的 属性 包装器,但 John Sundell 的这篇 article 详细解释了如何做。