SwiftUI 选择器没有更新

SwiftUI picker didn't update

我试图构建一个包含多个选择器的表单。第一个选择器将显示现有数据。第二个选择器将根据第一个选择器的 selection 从 API 获取数据。但是,当我打开表单时,第一个选择器工作但第二个选择器不显示任何内容。即使我 select other selection 来自第一个选择器,我也可以获得数据,但第二个选择器没有像我预期的那样更新。所以主要问题是如何让第二个选择器获取数据,因为第一个选择器中有一个默认的 selection。在第一个选择器

中创建select离子后导致第二个选择器没有更新的问题是什么
struct addBooking : View {
    @State var shops = ShopJSON.shared.shops //existing data
    @State var selectedShopIndex = 0
    @State var selectedOutletIndex = 0
    @ObservedObject var bookingOutletJSON = BookingOutletJSON()
    
    var body: some View {
        NavigationView{
            Form {
                Picker(selection: $selectedShopIndex, label: Text("Select Shop")) {
                    ForEach(0 ..< shops.count) {
                        Text(self.shops[[=10=]].name!)
                    }
                }
                .onChange(of: selectedShopIndex, perform: { (value) in
                    print("Shop changed")
                    bookingOutletJSON.getOutlet(selectedShopId: shops[value].shopID!)
                })
                Picker(selection: $selectedOutletIndex, label: Text("Select Outlet")){
                    ForEach(0 ..< bookingOutletJSON.outlets.count) {
                        Text(self.bookingOutletJSON.outlets[[=10=]].location!)
                    }
                }
                if bookingOutletJSON.outlets.count != 0 {
                    Text("\(bookingOutletJSON.outlets[0].location!)")
                }
class BookingOutletJSON : ObservableObject{
    @Published var outlets = [BookingOutlets]()
    init() {
        
    }
    func getOutlet(selectedShopId : Int){
        //API get data
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
          guard let data = data else {
            print(String(describing: error))
            return
          }
            if let decodedOutlet = try? JSONDecoder().decode(OutletModal.self, from: data) {
                DispatchQueue.main.async {
                    self.outlets = decodedOutlet.outlets!
                    print(self.outlets)
                    print("Outlet updated")
                }
            } else {
                print("Invalid response from server")
            }
        }

        task.resume()
    }
}

尝试使用另一个 ForEach 构造函数

Picker(selection: $selectedOutletIndex, label: Text("Select Outlet")){
    ForEach(bookingOutletJSON.outlets.indices, id: \.self) {
        Text(self.bookingOutletJSON.outlets[[=10=]].location!)
    }
}