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!)
}
}
我试图构建一个包含多个选择器的表单。第一个选择器将显示现有数据。第二个选择器将根据第一个选择器的 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!)
}
}