为什么这个SwiftUI选择器代码不起作用?
Xcode:11.2.1 下面的代码是一个包含两个组件的简单表单;选择器(用于选择字母)和文本(用于显示所选字母)。代码将编译并运行,但当选定字母时,它不会出现在“选定…”文本中。此外,Xcode在第一次(仅)选择一个字母时显示一个(伪?)运行时警告为什么这个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"]
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..谢谢,这很有效。但是,我仍然收到运行时警告。我猜生成该警告是因为文本字段正在更新,即使它在显示选择器时不可见。所以此版本没有收到警告?这是个问题?