SwiftUI — StateObject в родительском представлении недоступен в дочерней модели представленияIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI — StateObject в родительском представлении недоступен в дочерней модели представления

Сообщение Anonymous »

Код: Выделить всё

// In my root view aka Parent View
import SwiftUI

struct RootView: View {
@StateObject private var devices = DevicesViewModel()

var body: some View {
ScrollView {
UnitStatusCard(devicesVM: devices)
}
.onAppear() {
devices.fetchDevices()
}
}
}

// DeviceViewModel.swift - Parent View Model
import Foundation

class DevicesViewModel: ObservableObject {
@Published var models: [Device] = []

private let networkManager = NetworkManager()

init() {
fetchDevices()
}

public func fetchDevices() {
Task {
do {
if let unitId = UserDefaults.standard.string(forKey: kUnit) {
let models = try await networkManager.fetchData(path: "/api/test")

DispatchQueue.main.async {
self.models = models
}
}
} catch {...}
}
}
}

// UnitStatusCard.swift - Child View
struct UnitStatusCard: View {
@StateObject var unitStatusCardVM: UnitStatusCardViewModel

init(devicesVM: DevicesViewModel) {
self._unitStatusCardVM = StateObject(wrappedValue: UnitStatusCardViewModel(devicesVM: devicesVM))
}

var body: some View {
StatusView()
.onAppear() {
unitStatusCardVM.getStatusMeta()
}
}
}

// UnitStatusCardViewModel.swift - Child View Model
class UnitStatusCardViewModel: ObservableObject {
@Published var value: String = "Good"

var devicesVM: DevicesViewModel

init(devicesVM: DevicesViewModel) {
self.devicesVM = devicesVM
}

public func getStatusMeta() {
print(devicesVM.models) // value is [], WHY??
}
}
В DeviceViewModel.swift есть вызов API, результат получается успешно и без ошибок.
Однако, когда я передаю результат в свою дочернюю модель представления (

Код: Выделить всё

UnitStatusCardViewModel
), значение пустое, даже если оно правильно получено в соответствии с ProxyMan.

Код: Выделить всё

    public func getStatusMeta() {
print(devicesVM.models) // value is [], WHY??
}
Почему это и как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/793 ... view-model
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»