【发布时间】:2020-04-28 16:17:34
【问题描述】:
我有一个从 REST 后端服务器获取车辆列表的应用。然后,它使用该列表来构建车辆列表,点击这些车辆可以显示其中一辆的详细信息:
@State private var selectedVehicle: Vehicle?
@Binding var vehicles: [Vehicle]
List {
NavigationView {
ForEach( vehicles ) { vehicle in
NavigationLink( destination: VehicleDetailScreen( vehicle: vehicle ),
tag: vehicle,
selection: self.$selectedVehicle ) {
Text( vehicle.name )
}
}
}
}
struct VehicleDetailScreen: View {
var vehicle: Vehicle
var body: some View {
// Lots of rendering code omitted
}
}
到目前为止,一切都很好。这很好用。当我们从服务器获取更新的信息时,问题就出现了。更新绑定的vehicles 属性非常适合更新列表。但详细信息屏幕仍显示不再相关的数据。
我的第一个想法就是从 NavigationView 中弹出详细视图。不幸的是,SwiftUI 没有提供任何可靠的方法来在 iPad 上的两列视图中执行此操作。
我的下一个想法是我们需要将车辆作为@Binding 传递给 VehicleDetailScreen 以便我们可以更新它。但这也很难做到,因为我们需要对该绑定的引用,以便我们可以将更新的值填入其中。我能想到的唯一方法是完全重写我们的网络和模型对象代码,使其像 CoreData 一样工作,将对象保存在内存中并使用来自服务器的新值更新它们,而不是生成新对象。这将是一个很大的努力,如果有其他选择,显然不是我热衷于做的事情。
所以我有点坚持这一点。非常欢迎任何想法/想法/建议!
【问题讨论】:
-
我认为我们不需要查看
VehicleDetailScreen。您如何更新vehicles属性?向我们展示这方面的代码