网络请求后 SwiftUI 更新 Elements.count

SwiftUI update Elements.count after Network Request

我想用列更新自定义列表。

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? 感谢帮助。

在视图中,在显示视图时加载数据时使用 .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,以便视图自行更新。

您在 body 中使用的 maxRow 没有得到更新。 您应该将视图直接绑定到 products 而不是尝试复制它:

{
     @ObservedObject var networkManager = NetworkManager()

     var maxRow: Int { networkManager.products.count }

     var body: some View {
         Text("\(maxRow) Elements")
     } 
}