如何将顺序数据传递到 SwiftUI 中的 navigationBarTitle
How to pass sequential data into a navigationBarTitle in SwiftUI
我有一个 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
非常感谢任何帮助。
您可以像传递城市列表一样将用户传递给 CityList
。
错误消息告诉您缺少 CityList
自动接收的成员初始化程序的参数之一。成员初始化器采用结构的所有属性,我相信,按照它们在结构中声明的顺序。
NavigationLink(destination: CityList(thisUser: user, cities: user.cities)) { UserRow(user: user) }
我有一个 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
非常感谢任何帮助。
您可以像传递城市列表一样将用户传递给 CityList
。
错误消息告诉您缺少 CityList
自动接收的成员初始化程序的参数之一。成员初始化器采用结构的所有属性,我相信,按照它们在结构中声明的顺序。
NavigationLink(destination: CityList(thisUser: user, cities: user.cities)) { UserRow(user: user) }