Как сделать данные постоянными в SwiftUI? - PullRequest
0 голосов
/ 15 апреля 2020

Итак, это мой View Model

import Foundation
import SwiftUI
import Combine
import Alamofire


class AllStatsViewModel: ObservableObject {
    @Published var isLoading: Bool = true
    @Published var stats = [CountryStats]()

    func fetchGlobalStats() {
        let request = AF.request("https://projectcovid.deadpool.wtf/all")
       request.responseDecodable(of: AllCountryStats.self) { (response) in
         guard let globalStats = response.value else { return }
        DispatchQueue.main.async {
            self.stats = globalStats.data
        }

        self.isLoading = false
       }
    }
}

И это мой вид, где я подписываюсь на изменение:

struct CardView: View {
    @ObservedObject var allStatsVM = AllStatsViewModel()

    var body: some View {
        VStack {
            if self.allStatsVM.stats.count > 0 {
                Text(self.allStatsVM.stats[0].country)
            } else {
                Text("data loading")
            }   

        }


        .onAppear {
            self.allStatsVM.fetchGlobalStats()
        }
    }

}

Итак, когда я открываю приложение в первый раз , Я получаю данные, а затем, когда я go возвращаюсь домой и снова открываю приложение, я вижу только загрузку данных.

Есть ли способ сохранить данные? Я знаю, что @State помогает, но я новичок в SwiftUI и не знаю, как это работает

1 Ответ

0 голосов
/ 16 апреля 2020

каждый раз, когда вы открываете CardView, вы создаете новое:

@ObservedObject var allStatsVM = AllStatsViewModel()

. Что вам, вероятно, нужно, это создать его в домашнем представлении и передать ObservedObject из домашнего представления в CarView, где вы объявлять:

@ObservedObject var allStatsVM: AllStatsViewModel

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...