ios - 如何使数据在 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 的初学者,不知道它是如何工作的
解决方案
每次打开 CardView 时都会创建一个新的:
@ObservedObject var allStatsVM = AllStatsViewModel()
您可能想要的是在主视图中创建它,并将 ObservedObject 从主视图传递到 CarView,您在其中声明:
@ObservedObject var allStatsVM: AllStatsViewModel
然后数据将持续存在,当 CardView 再次出现时,它将显示它。
推荐阅读
- docker - Heroku 上的 redis json (redislabs/rejson:latest)
- azure - 队列中的 Azure ServiceBus REST API 总消息
- swiper - 将项目添加到垂直滑动器
- java - 使用 MetaWear API 将数据保存到 CSV
- php - Laravel Eloquent OrderBy 与模型 Laravel 上的 belongsTo
- javascript - .js 末尾的奇怪随机数
- google-calendar-api - 是否可以对活动参与者进行原子更新?
- url - 如何在 WebView App 中的 URL 点击设置插页式广告?
- react-native - 如何在文本中添加笔画?
- google-sheets - 如何生成唯一“组合”的三列列表?