在 SwiftUI 中
我正在嘗試計算 API 中的資料數量以顯示在視圖上
當我在同一個類中列印一個變數@Published var counts = 0
時,我看到來自 API 的值已被保存
但是當它顯示在 View 上時,默認值
我在傳輸資料的方法上有錯誤還是有其他問題?
class Api : ObservableObject{
@Published var counts = 0
func getData(complation: @escaping ([model]) -> ()) {
guard let url = URL(string: "https://XXXXXX") else { return }
let token = "28|cSXXXXXX"
var request = URLRequest(url: url)
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
URLSession.shared.dataTask(with: request) { data, responce, err in
guard let data = data else { return }
do {
let dataModel = try JSONDecoder().decode([model].self, from: data)
self.counts = dataModel.count
DispatchQueue.main.async {
complation(dataModel)
}
} catch {
print("error: ", error)
}
}
.resume()
}
}
在這里查看
import SwiftUI
struct Tap1Section1: View {
@ObservedObject var countid = Api()
@State var modelname : [model] = [model(title: "")]
var body: some View {
VStack {
ForEach(modelname) { item in
Text("\(countid.counts)")
}
}
.onAppear {
Api().getData { item in
self.modelname = item
}
}
}
}
uj5u.com熱心網友回復:
您可以嘗試以下替代方法來獲取模型的數量:
struct Tap1Section1: View {
@StateObject var viewModel = Api() // <-- here
var body: some View {
VStack {
Text("\(viewModel.models.count)") // <-- here
ForEach(viewModel.models) { item in // <-- here
Text(item.title) // <-- here
}
}
.onAppear {
viewModel.getData()
}
}
}
// -- here
struct Model: Identifiable, Decodable {
let id = UUID()
var title: String
}
class Api: ObservableObject {
@Published var models: [Model] = [] // <-- here
func getData() {
guard let url = URL(string: "https://XXXXXX") else { return }
let token = "28|cSXXXXXX"
var request = URLRequest(url: url)
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
URLSession.shared.dataTask(with: request) { data, responce, err in
guard let data = data else { return }
do {
let dataModel = try JSONDecoder().decode([Model].self, from: data)
DispatchQueue.main.async {
self.models = dataModel // <-- here
}
} catch {
print("error: ", error)
}
}
.resume()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470112.html