为什么使用SwiftUI时选择器绑定不会更新?

时间:2019-10-13 20:08:53

标签: swift swiftui

我刚刚开始学习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])并不能解决我的问题。

我如何获得问候以显示被挑选人的名字?

1 个答案:

答案 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])")
                }
            }
        }
    }
}

enter image description here