迭代从 JSON 初始化的 Swift OrderedDictionary

问题描述 投票:0回答:1

这是我提出的StackOverflow 帖子的后续问题,但现在我正在尝试迭代 JSON 中的

menu
字段以显示 SwiftUI 中的所有菜单选项和过敏原。

我有这个

ForEach
循环,应该迭代所有键,但是,作为使用发布的 JSON 片段的示例,它只显示
"Southwest Tofu"
及其过敏原,而不是全部。

struct TodaysMenuOptionsView: View {
    @Binding var menuItems: OrderedDictionary<String, [String]>
    var body: some View {
        ZStack(alignment: .leading) {
            ForEach(menuItems.keys.sorted(), id: \.self) { key in
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color("Menu Options Color"))
                    .frame(height: 100)
                    VStack(alignment: .leading) {
                        Text(key)
                            .font(.title3)
                            .fontWeight(.semibold)
                        if let value = menuItems[key] {
                            HStack {
                                ForEach(value, id: \.self) { item in
                                    Text(item)
                                }
                            }
                        }

                    }
                    .padding()
            }
            .padding()
        }
    }
}

这是我正在使用的 JSON 片段:

   {
    "day": "Friday",
    "locationName": "Memorial Union Quad",
    "coordinate": [38.54141, -121.74845],
    "menu": [
        "Soy Ciltrano Lime Chicken",
        ["🌾","🫛"],
        "Southwest Tofu",
        ["🫛","V"]
    ]
  }

这是 Swift 中数据建模的样子:

import Foundation
import OrderedCollections

struct Menu : Codable, Hashable {
    var id: UUID { UUID() }
    let day: String
    let locationName: String
    let coordinate: [Double]
    let menu: OrderedDictionary<String, [String]>
    
    func getTodaysLocation(_ today: String)-> String{
        if today == day{
            return locationName
        }
        return ""
    }
    
    
}
ios json swift swiftui
1个回答
0
投票

您使用了错误的堆栈。使用

ZStack
所有元素都放置在彼此之上,请使用
VStack
代替。

或者更好地使用

List

© www.soinside.com 2019 - 2024. All rights reserved.