网络请求后 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")
}
}
我想用列更新自定义列表。
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")
}
}