【发布时间】:2020-03-12 09:17:40
【问题描述】:
我使用 AlamoFire 从服务器获取了一些数据,请求很好,模型都很好,问题是,请求完成后,我的 @State 变量没有更新。
import SwiftUI
import Combine
struct ViewLaundryHome: View {
@State var items = LaundryItemCategoryViewModel()
var body: some View {
VStack {
Text(items.items.count.description) // returns 0 and never updates
}
}
}
class LaundryItemCategoryViewModel: ObservableObject {
var didChange = PassthroughSubject<LaundryItemCategoryViewModel, Never>()
var items = [LaundryItemCategory.Result.Doc]() { didSet { didChange.send(self) } }
init() {
productCategoryR {
let d = try! JSONDecoder().decode(LaundryItemCategory.self, from: $0)
self.items = (d.result?.docs!)!
print(self.items.count) // returns 5
}
}
}
我想我完全按照 youtube 上的这个视频做的,但它不适合我。
https://www.youtube.com/watch?v=xT4wGOc2jd4&t=17s
这是我的数据模型:
struct LaundryItemCategory: Codable {
let result: Result?
let id: Int?
enum CodingKeys: String, CodingKey {
case result = "Result"
case id = "Id"
}
struct Result: Codable {
let docs: [Doc]?
let currentPage: Int?
let pages: Int?
let limit: Int?
let total: Int?
enum CodingKeys: String, CodingKey {
case docs = "Docs"
case currentPage = "CurrentPage"
case pages = "Pages"
case limit = "Limit"
case total = "Total"
}
struct Doc: Codable, Hashable, Identifiable {
let id: Int
let title: String
let media: String
let price: Int
enum CodingKeys: String, CodingKey {
case id = "Id"
case title = "Title"
case media = "Media"
case price = "Price"
}
}
}
}
之后。一些挖掘:
发生了一些奇怪的事情。我向应用程序添加了另一个状态,并使用文本字段对其进行了更改,就在我更改新状态的值的那一刻,第一个状态更新:-/
@State var items = LaundryItemCategoryViewModel()
@State var i = ""
var body: some View {
VStack {
Text(items.items.count.description)
TextField("sss", text: $i)
Text(i)
}
}
【问题讨论】: