为什么这个SwiftUI选择器代码不起作用?

为什么这个SwiftUI选择器代码不起作用?,swift,xcode,swiftui,picker,Swift,Xcode,Swiftui,Picker,Xcode:11.2.1 下面的代码是一个包含两个组件的简单表单;选择器(用于选择字母)和文本(用于显示所选字母)。代码将编译并运行,但当选定字母时,它不会出现在“选定…”文本中。此外,Xcode在第一次(仅)选择一个字母时显示一个(伪?)运行时警告 struct ContentView: View { @State private var letter = "" private let letters = ["Alpha", "Bravo", "Charlie"]

Xcode:11.2.1

下面的代码是一个包含两个组件的简单表单;选择器(用于选择字母)和文本(用于显示所选字母)。代码将编译并运行,但当选定字母时,它不会出现在“选定…”文本中。此外,Xcode在第一次(仅)选择一个字母时显示一个(伪?)运行时警告

struct ContentView: View {

    @State private var letter = ""
    private let letters = ["Alpha", "Bravo", "Charlie"]

    var body: some View {
        NavigationView {
            Form {
                Picker("Select a letter", selection: $letter) {
                    ForEach(0..<letters.count) {
                        Text(self.letters[$0])
                    }
                }
                Text("Selected letter: \(letter)")
            }
            .navigationBarTitle("Main Menu")
        }
    }
}
struct ContentView:View{
@国家私人var letter=“”
私人出租信=[“阿尔法”,“好极了”,“查理”]
var body:一些观点{
导航视图{
形式{
选择器(“选择一个字母”,选择:$letter){

选择器内的ForEach(0..ForEach类型应与选择类型对齐

下面是一个应该适用于您的更正代码:

@State private var letter = ""
private let letters = ["Alpha", "Bravo", "Charlie"]

var body: some View {
    NavigationView {
        Form {
            Picker("Select a letter", selection: $letter) {
                ForEach(letters, id: \.self) { option in
                    Text(option)
                }
            }
            Text("Selected letter: \(letter)")
        }
        .navigationBarTitle("Main Menu")
    }
}

为了记录在案,我在回答我自己的问题时,基于上述已被接受的答案以及我因该答案而增加的知识。在这个问题中,我不是从数组中选择字母,而是从数组中选择字母的索引。因此,基于洞察力,另一个可行的解决方案可能是:

struct ContentView: View {

    @State private var letterIndex = 0
    private let letters = ["Alpha", "Bravo", "Charlie"]

    var body: some View {
        NavigationView {
            Form {
                Picker("Select a letter", selection: $letterIndex) {
                    ForEach(0..<letters.count) { index in
                        Text(self.letters[index])
                    }
                }
                Text("Selected letter: \(letters[letterIndex])")
        }
        .navigationBarTitle("Main Menu")
    }
}
struct ContentView:View{
@国家私有var letterIndex=0
私人出租信=[“阿尔法”,“好极了”,“查理”]
var body:一些观点{
导航视图{
形式{
选择器(“选择一个字母”,选择:$letterIndex){

ForEach(0..谢谢,这很有效。但是,我仍然收到运行时警告。我猜生成该警告是因为文本字段正在更新,即使它在显示选择器时不可见。所以此版本没有收到警告?这是个问题?