看哪两个拾取器。第一个,当未注释时(第二个注释)不起作用——当我更改房间时, Text() 不会更新。但此处显示的代码(带有第二个选择器)却可以。
唯一的区别在于内容封闭。为什么我创建内容的方式会影响绑定?这是错误还是预期行为?
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()
}
}
}
The 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()
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)