SwiftUI中的Picker可以使用ForEach的一个版本,但不能使用另一个版本——是错误还是预期行为



看两个选取器。第一个,当取消注释时(第二个注释时(不起作用——当我更改房间时,Text((不会得到更新。但是这里显示的代码,以及第二个Picker,确实如此。

唯一的区别在于内容的封闭性。为什么我创建内容的方式会影响绑定?这是错误还是预期行为?

struct ContentView: View {
var rooms = ["Kitchen", "Dining Room", "Living Room", "Bathroom"]
@State private var selectedRoomIndex = 0
var body: some View {
VStack {
/* Doesn't work :-(
Picker(selection: $selectedRoomIndex, label: Text("Room: ")) {
ForEach(rooms, id: .self){ room in
Text(room)

}
}
*/
/* This works, huzzah! But why? */
Picker(selection: $selectedRoomIndex, label: Text("Room: ")) {
ForEach(0 ..< rooms.count){
Text(rooms[$0])

}
}

Text("Chosen room: (rooms[selectedRoomIndex])")
Spacer()
}
}

}

Picker的选择和内容ForEach的数据必须是相同的类型,这就是为什么第二个变体工作-选择是Int,ForEach元素是Int的原因,所以第一个变体工作应该像下面一样

使用Xcode 12/iOS 14 进行测试

@State private var selectedRoom: String = "Kitchen"
var body: some View {
VStack {
Picker(selection: $selectedRoom, label: Text("Room: ")) {
ForEach(rooms, id: .self){ room in
Text(room)
}
}
Text("Chosen room: (selectedRoom)")
Spacer()
}
}

最新更新