我刚刚开始学习Swift(甚至是Swift UI上的新功能!),如果这是一个新手错误,我深表歉意。
我正在尝试编写一个非常简单的程序,其中用户从选择器中选择某人的名字,然后看到下面的文本,该文本显示该人的问候。
但是,使用选择器选择新值时,绑定变量selectedPerson不会更新。这意味着,即使我选了一个人,也不会显示“ Hello Harry”之类的问候,而是显示“ Hello no-one”。
struct ContentView: View {
var people = ["Harry", "Hermione", "Ron"]
@State var chosenPerson: String? = nil
var body: some View {
NavigationView {
Form {
Section {
Picker("Choose your favourite", selection: $chosenPerson) {
ForEach ((0..<people.count), id: \.self) { person in
Text(self.people[person])
}
}
}
Section{
Text("Hello \(chosenPerson ?? "no-one")")
}
}
}
}
}
(我提供了一两个原始格式,以防万一。)
我看过this question,这似乎是一个类似的问题,但是在.tag(person)
中添加Text(self.people[person])
并不能解决我的问题。
我如何获得问候以显示被挑选人的名字?
答案 0 :(得分:3)
绑定到索引,而不是字符串。使用选择器,您不会做任何会改变字符串的事情!选择器更改时更改的是所选索引。
struct ContentView: View {
var people = ["Harry", "Hermione", "Ron"]
@State var chosenPerson = 0
var body: some View {
NavigationView {
Form {
Section {
Picker("Choose your favourite", selection: $chosenPerson) {
ForEach(0..<people.count) { person in
Text(self.people[person])
}
}
}
Section {
Text("Hello \(people[chosenPerson])")
}
}
}
}
}