【发布时间】:2021-03-21 09:18:41
【问题描述】:
我是 Swift 和 SwiftUI 的新手,我正在练习使用属性包装器。我创建了一个简单的应用程序,您可以在其中单击伦敦、纽约或迈阿密。一旦您点击其中任何一个,它将导航到它自己的屏幕,该屏幕将显示城市名称、当前时间和 covid 死亡人数。
我没有将它连接到我只是想练习的 API。我花了将近 8 个小时试图找到一种方法,让城市在第二个视图中显示自己的属性,而无需创建 3 个单独的视图模型。每个导航目的地显示伦敦的属性。我正在尝试找到一种方法来解决它。我还从可识别模型中创建了 3 个对象/实例。如果你能帮助我,非常感谢。
这是我的视图模型:
class CityViewModel: ObservableObject {
@Published var title = "London"
@Published var deaths = "5894"
@Published var time = "8:36"
}
现在这是我的内容视图:
struct ContentView: View {
@ObservedObject var cities = CityViewModel()
var body: some View {
NavigationView {
ZStack {
Color.black
.ignoresSafeArea()
VStack {
NavigationLink(
destination: ToogleView(cityname: self.$cities.title, deaths: self.$cities.deaths, time: self.$cities.time),
label: {
Text("London")
.foregroundColor(.white)
.bold()
.font(.system(size: 30))
})
Spacer()
NavigationLink(
destination: ToogleView(cityname: self.$cities.title, deaths: self.$cities.deaths, time: self.$cities.time),
label: {
Text("New York")
.foregroundColor(.white)
.bold()
.font(.system(size: 30))
})
我为单击 Navigationlink 时创建了第二个视图
struct ToogleView: View {
@Binding var cityname:String
@Binding var deaths:String
@Binding var time:String
var body: some View {
ZStack {
Color.black
.ignoresSafeArea()
VStack {
Spacer()
Text(cityname)
.foregroundColor(.white)
.font(.system(size: 24))
.bold()
Spacer()
Text(time)
.foregroundColor(.white)
.font(.system(size: 18))
Spacer()
HStack{
Image(systemName: "person.3.fill")
.foregroundColor(.white)
Text(deaths)
.foregroundColor(.red)
.bold()
}
Spacer()
}
}
}
}
【问题讨论】: