Вы можете определить привязку к выбранной строке и использовать Список, читающий этот выбор. Затем вы инициализируете выделение первому человеку в массиве персон.
Обратите внимание, что в macOS вы не используете NavigationLink
, вместо этого вы условно отображаете подробный вид с оператором if
внутри NavigationView
.
Если человек не может быть идентифицирован, вы должны добавить id: \.self
в l oop. Это выглядит следующим образом:
struct PersonList: View {
@Binding var selectedPerson: Person?
var body: some View {
List(persons, id: \.self, selection: $selectedPerson) { person in // persons is an array of persons
PersonRow(person: person).tag(person)
}
}
}
Затем в главном окне:
struct ContentView: View {
// First cell will be highlighted and selected
@State private var selectedPerson: Person? = person[0]
var body: some View {
NavigationView {
PersonList(selectedPerson: $selectedPerson)
if selectedPerson != nil {
PersonDetail(person: person!)
}
}
}
}
Ваш структурный сотрудник должен быть Hashable, чтобы быть отмеченным в списке. Если ваш тип достаточно прост, добавьте соответствие Hashable:
struct Person: Hashable {
var name: String
// ...
}
Есть хороший учебник, использующий тот же принцип здесь , если вы хотите более полный пример.