下面是我的阵列:
class Storages: ObservableObject {
let storage = Storage.storage()
let uid = UserAuth().uid ?? "<uid>"
@Published var photos: [String:String?] = [
"img1": UserDefaults.standard.string(forKey: "img1"),
"img2": UserDefaults.standard.string(forKey: "img2"),
"img3": UserDefaults.standard.string(forKey: "img3"),
]
下面是我的观点:
struct EditProfile: View {
@ObservedObject var storage = Storages()
var body: some View {
VStack {
Text("Points")
.font(Font.system(size: 21))
.fontWeight(.bold)
HStack {
ForEach(storage.photos.sorted(by: <), id: \.key){ (key,val) in
EditableCircleImage(key: key, imgName: val)
}
}
如果我将photos
字典从[string:string?]
更改为[string:string]
(通过放入??“”
以防止nil
值--这样就可以了。但是我想保留nil
值,因为我需要知道数组项值何时为nil。
下面是我传递给我的for each的结构
:
struct EditableCircleImage: View {
@ObservedObject var storage = Storages()
let key: String
let imgName: String?
知道为什么我不能使用[string:string?]
吗?
试试这个变体。 使用Xcode12b上的一些复制代码进行测试。
ForEach(storage.photos.sorted(by: { $0.key < $1.key }), id: \.key){ (key,val) in
EditableCircleImage(key: key, imgName: val)
}