【问题标题】:How to pass sequential data into a navigationBarTitle in SwiftUI如何将顺序数据传递到 SwiftUI 中的 navigationBarTitle
【发布时间】:2020-02-27 03:15:49
【问题描述】:

我有一个以用户列表开头的主从应用程序 -> 他们的城市 -> 他们的城镇。视图的内容工作正常,但我不知道如何调整我的数据流,以便 .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

非常感谢任何帮助。

【问题讨论】:

    标签: swiftui navigationbar master-detail dataflow


    【解决方案1】:

    您可以将用户传递给CityList,就像传递城市列表一样。

    错误消息告诉您,您缺少 CityList 自动接收的成员初始化程序的参数之一。成员初始化程序采用结构的所有属性,并且我相信它们按照它们在结构中声明的顺序。

    NavigationLink(destination: CityList(thisUser: user, cities: user.cities)) { UserRow(user: user) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2021-01-09
      • 2020-06-20
      • 2021-03-05
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      相关资源
      最近更新 更多