如何在SwiftUI中将顺序数据传递到navigationBarTitle
我有一个主细节应用程序,以用户列表->他们的城市->他们的城镇开始。视图的内容工作正常,但我不知道如何调整数据流,以便.navigationBarTitle反映以前选择的项目。e、 如果我选择用户“jimmy”,我希望“jimmy”成为城市列表中的标题 以下是我的数据模型:如何在SwiftUI中将顺序数据传递到navigationBarTitle,swiftui,navigationbar,master-detail,dataflow,Swiftui,Navigationbar,Master Detail,Dataflow,我有一个主细节应用程序,以用户列表->他们的城市->他们的城镇开始。视图的内容工作正常,但我不知道如何调整数据流,以便.navigationBarTitle反映以前选择的项目。e、 如果我选择用户“jimmy”,我希望“jimmy”成为城市列表中的标题 以下是我的数据模型: import SwiftUI struct UserModel: Codable, Identifiable { let id: Int let firstName: String let last
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
非常感谢您的帮助 您可以将用户传递到
CityList
,就像传递城市列表一样
错误消息告诉您缺少CityList
自动接收的memberwise初始值设定项的一个参数。memberwise初始值设定项接受结构的所有属性,我相信,按照它们在结构中声明的顺序
NavigationLink(destination: CityList(thisUser: user, cities: user.cities)) { UserRow(user: user) }