SwiftUI中的Picker可以使用一个版本的ForEach,但不能使用另一个版本-一个bug,或者预期的行为?

SwiftUI中的Picker可以使用一个版本的ForEach,但不能使用另一个版本-一个bug,或者预期的行为?,swiftui,picker,Swiftui,Picker,看两个采摘者。第一个是未注释的(第二个是注释的)不起作用——当我更改房间时,Text()不会得到更新。但是这里显示的代码,使用第二个选择器,就可以了 唯一的区别在于内容闭包。为什么创建内容的方式会影响绑定?这是错误还是预期的行为 struct ContentView: View { var rooms = ["Kitchen", "Dining Room", "Living Room", "Bathroom"] @

看两个采摘者。第一个是未注释的(第二个是注释的)不起作用——当我更改房间时,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()
    }
}
struct ContentView:View{
var房间=[“厨房”、“餐厅”、“客厅”、“浴室”]
@国家私有变量selectedRoomIndex=0
var body:一些观点{
VStack{
/*不起作用:-(
选择器(选择:$selectedRoomIndex,标签:文本(“房间:”){
ForEach(rooms,id:\.self){roomin
文本(房间)
}
}
*/
/*行得通,胡扎!但为什么*/
选择器(选择:$selectedRoomIndex,标签:文本(“房间:”){
ForEach(0..<房间数){
文本(房间[$0])
}
}
文本(“选定房间:\(房间[selectedRoomIndex]))
垫片()
}
}

}选择器选择和内容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()
    }
}