提问者:小点点

字符串:字符串? 数组而不是字符串:字符串数组在SwiftUI视图中中断ForEach?


下面是我的阵列:

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?]吗?


共1个答案

匿名用户

试试这个变体。 使用Xcode12b上的一些复制代码进行测试。

ForEach(storage.photos.sorted(by: { $0.key < $1.key }), id: \.key){ (key,val) in
    EditableCircleImage(key: key, imgName: val)
}