我想用列更新自定义列表。
struct XyzView: View {
@ObservedObject var networkManager: NetworkManager = NetworkManager()
@State var maxrow : Int = 1
init() {
maxrow = self.maxRow()
}
func maxRow() -> Int {
let a = self.networkManager.products.count
return a
}
var body: some View {
Text("\(maxrow) Elements")
}
}
问题在于网络请求之后,计数未正确更新并重新加载视图。
DispatchQueue.main.async {
self.products = products
}
如何更新视图并将maxrow设置为当前products.count? 感谢帮助。
答案 0 :(得分:1)
您在maxRow
中使用的body
没有得到更新。
您应该将视图直接绑定到products
上,而不要尝试复制它:
{
@ObservedObject var networkManager = NetworkManager()
var maxRow: Int { networkManager.products.count }
var body: some View {
Text("\(maxRow) Elements")
}
}
答案 1 :(得分:0)
在Views中,在显示View时加载数据时使用.onAppear
可能会更高效,更有效。
我将您的代码重新制作为以下内容:
struct XyzView: View {
@ObservedObject var networkManager: NetworkManager = NetworkManager()
@State var maxrow : Int = 1
func maxRow() -> Int {
let a = self.networkManager.products.count
return a
}
var body: some View {
Text("\(maxrow) Elements")
.onAppear {
self.maxrow = self.maxRow()
}
}
}
这应该像您想要的那样工作。
提示:如果您在NetworkManager模型中进行了任何更改,请确保进行了所有变量@Published
以便View自行更新。