0

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

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

4

2 回答 2

2

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

{
     @ObservedObject var networkManager = NetworkManager()

     var maxRow: Int { networkManager.products.count }

     var body: some View {
         Text("\(maxRow) Elements")
     } 
}
于 2019-11-22T16:52:39.533 回答
0

.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,以便视图自行更新。

于 2019-11-22T16:31:57.707 回答