我有一个主从应用程序,从用户列表->他们的城市->他们的城镇开始。视图的内容工作正常,但是我无法弄清楚如何调整数据流,以使.navigationBarTitle反映以前选择的项目。例如如果我选择用户“吉米”,我希望“吉米”成为城市列表中的标题。
这是我的数据模型:
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
非常感谢您的帮助。
答案 0 :(得分:1)
您可以将用户传递到CityList
,就像传递城市列表一样。
错误消息告诉您,您缺少CityList
自动接收的成员初始化器的参数之一。成员初始化程序将采用该结构的所有属性,并且我相信将按在结构中声明它们的顺序进行操作。
NavigationLink(destination: CityList(thisUser: user, cities: user.cities)) { UserRow(user: user) }