这是一个大问题。
我想每秒更新一次 View 正文中的项目(消息)列表。
该函数将执行以下特定代码:
- 我的(新)数据将从我的 REST API 下载
- 数据将添加到Core Data
- View (我正文中的一个简单列表)将最终更新。 (这实际上是我的问题)
如何在我的 View 中每秒调用一个函数来执行此刷新?我尝试先使用 init(),但之后我被锁定了,因为项目的刷新与计时器相结合是对我来说不稳定。
非常感谢您给我带来的任何路径/线索。
最佳答案
这些代码都不属于您的 View 。它应该在一个单独的 ObservableObject 中。 View 将订阅它拥有的任何@ObservedObject,并且只要对象的@Published 属性发生变化,它就会自行重建。
例如,这段代码是一个 Observable 对象,它启动一个计时器,每秒启动一个网络请求,并将这些请求的结果分配给 @Published
myData 属性,这将导致拥有的 View 要重建的此对象。每秒触发一个网络请求并假设它以正确的顺序返回可能是一个非常糟糕的主意,但如果这确实是您想要执行的操作,则此代码会执行此操作。
import Combine
class MyObserableObject: ObservableObject {
@Published var myData: [Int] = []
private var subscription: AnyCancellable?
init() {
subscription = Timer
.TimerPublisher(interval: 1, runLoop: RunLoop.main, mode: .default)
.map { _ -> AnyPublisher<[Int], Never> in
URLSession
.shared
.dataTaskPublisher(for: URL(string: "somefakeurl.com")!)
.map(\.data)
.decode(type: [Int].self, decoder: JSONDecoder())
.replaceError(with: [])
.eraseToAnyPublisher()
}
.switchToLatest()
.receive(on: RunLoop.main)
.assign(to: \.myData, on: self)
}
}
关于swiftui - 如何使用 SwiftUI 每秒刷新一次 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58738443/