У меня есть приложение master-detail, которое начинается со списка пользователей -> их города -> их города. Содержимое представлений работает нормально, но я не могу понять, как настроить поток данных так, чтобы .navigationBarTitle отражал ранее выбранный элемент. например, если я выберу пользователя «jimmy», я хочу, чтобы «jimmy» был заголовком списка городов.
Вот моя модель данных:
import SwiftUI
struct UserModel: Codable, Identifiable {
let id: Int
let firstName: String
let lastName: String
let cities: [CityModel]
enum CodingKeys: String, CodingKey {
case id
case firstName = "first_name"
case lastName = "last_name"
case cities
}
}
struct CityModel: Codable, Identifiable {
let id: Int
let name: String
let towns: [TownModel]
}
struct TownModel: Codable, Identifiable {
let id: Int
let name: String
}
Вот мой корневой вид,UserList.swift:
import SwiftUI
struct UserList: View {
var body: some View {
NavigationView {
List(userData) { user in
NavigationLink(destination: CityList(cities: user.cities)) {
UserRow(user: user)
}
}
.navigationBarTitle(Text("Users"))
}
}
}
struct UserList_Previews: PreviewProvider {
static var previews: some View {
UserList()
}
}
А вот CityList.swift, щелкнув по которому открывается пользователь:
import SwiftUI
struct CityList: View {
var thisUser: UserModel
var cities: [CityModel]
var body: some View {
List (cities) { city in
NavigationLink(destination: TownList(towns: city.towns)) {
CityRow(city: city)
}.navigationBarTitle(Text(self.thisUser.firstName))
}
}
}
Ошибка выдается в следующей строке UserList.swift, потому что онавызов CityList, но не учитывает ссылку CityList на thisUser. Только я не уверен, что правильный синтаксис для его настройки.
NavigationLink(destination: CityList(cities: user.cities)) { UserRow(user: user) }
ERROR: Missing argument for parameter 'thisUser' in call
Любая помощь очень ценится.