Почему привязка выбора не обновляется при использовании SwiftUI? - PullRequest
0 голосов
/ 13 октября 2019

Я только начал изучать Swift (и даже новее в Swift UI!), Поэтому извиняюсь, если это ошибка новичка.

Я пытаюсь написать очень простую программу, в которой пользователь выбирает чье-то имя изсборщик, а затем видит текст ниже, который отображает приветствие для этого человека.

Но связанная переменная selectedPerson не обновляется при выборе нового значения с помощью средства выбора. Это означает, что вместо отображения приветствия, такого как «Привет, Гарри», «Привет, никто» отображается даже тогда, когда я выбрал человека.


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")")
        }
        }
    }
   }
}

(я включил одну или две частиоригинальное форматирование на тот случай, если что-то изменится)

Я посмотрел на этот вопрос , казалось, что это может быть похожая проблема, но добавление .tag(person) к Text(self.people[person])не решил мою проблему.

Как я могу получить приветствие, чтобы показать имя выбранного человека?

1 Ответ

3 голосов
/ 13 октября 2019

Привязка к индексу, а не к строке. Используя сборщик, вы не делаете ничего, что могло бы изменить строку! Что меняется при изменении выбора - это выбранный индекс.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...