Я получаю некоторые данные с сервера, используя 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)
}
}