首页 > 解决方案 > 如何使数据在 SwiftUI 中持久化?

问题描述

所以,这是我的视图模型

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()
        }
    }

}

所以,当我第一次打开应用程序时,我得到了数据,然后当我回家重新打开应用程序时,我只能看到数据加载。

有没有办法持久化数据?我知道@State 有帮助,但我是 SwiftUI 的初学者,不知道它是如何工作的

标签: iosswiftui

解决方案


每次打开 CardView 时都会创建一个新的:

@ObservedObject var allStatsVM = AllStatsViewModel()

您可能想要的是在主视图中创建它,并将 ObservedObject 从主视图传递到 CarView,您在其中声明:

@ObservedObject var allStatsVM: AllStatsViewModel

然后数据将持续存在,当 CardView 再次出现时,它将显示它。


推荐阅读