gpt4 book ai didi

arrays - 如何在 SwiftUI 的 @AppStorage 中存储嵌套数组

转载 作者:行者123 更新时间:2023-12-03 21:12:04 24 4
gpt4 key购买 nike

@AppStorage最近在 SwiftUI 中引入,似乎可以替代 UserDefaults .
我正在尝试制作 @AppStorage能够存储嵌套列表。
对于简单的情况,你会做

@AppStorage("selected") var selected = 0
我在处理普通的 UserDefaults 时使用了这个:
@Published var list = UserDefaults.standard.array(forKey: "nestedList") as? [[String]] ?? [[String]]()
长话短说,我如何转换普通的旧 UserDefuaults到新的属性包装器, @AppStorage ?

最佳答案

您所需要的只是符合 ArrayRawRepresentable使用来自 here 的扩展名:

extension Array: RawRepresentable where Element: Codable {
public init?(rawValue: String) {
guard let data = rawValue.data(using: .utf8),
let result = try? JSONDecoder().decode([Element].self, from: data)
else {
return nil
}
self = result
}

public var rawValue: String {
guard let data = try? JSONEncoder().encode(self),
let result = String(data: data, encoding: .utf8)
else {
return "[]"
}
return result
}
}
这是一个演示:
struct ContentView: View {
@AppStorage("items") var items: [[String]] = [
["1", "2"],
["a", "b", "c"],
]

var body: some View {
VStack {
Text("items: \(String(describing: items))")
Button("Add item") {
items[0].append(String(Int.random(in: 1...10)))
}
}
}
}

关于arrays - 如何在 SwiftUI 的 @AppStorage 中存储嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63166706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com