SwiftUI选取器未更新

SwiftUI选取器未更新,swiftui,ios14,Swiftui,Ios14,我试图构建一个包含多个选择器的表单。第一个选择器将显示现有数据。第二个选择器将根据第一个选择器的选择从API获取数据。但是,当我打开表单时,第一个选择器工作,而第二个选择器不显示任何内容。即使我从第一个选择器中选择了其他选择,我也可以获得数据,但第二个选择器没有按照我的预期进行更新。因此,主要问题是如何使第二个选择器获取数据,因为第一个选择器中有一个默认选择。在第一个选择器中进行选择后,导致第二个选择器没有更新的问题是什么 struct addBooking : View { @Stat

我试图构建一个包含多个选择器的表单。第一个选择器将显示现有数据。第二个选择器将根据第一个选择器的选择从API获取数据。但是,当我打开表单时,第一个选择器工作,而第二个选择器不显示任何内容。即使我从第一个选择器中选择了其他选择,我也可以获得数据,但第二个选择器没有按照我的预期进行更新。因此,主要问题是如何使第二个选择器获取数据,因为第一个选择器中有一个默认选择。在第一个选择器中进行选择后,导致第二个选择器没有更新的问题是什么

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[$0].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[$0].location!)
                    }
                }
                if bookingOutletJSON.outlets.count != 0 {
                    Text("\(bookingOutletJSON.outlets[0].location!)")
                }
尝试使用另一个ForEach构造函数

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