Ни один из этого кода не принадлежит на ваш взгляд. Это должно быть в отдельном ObservableObject. Представление будет подписываться на любой принадлежащий ему объект @ObservedObject и будет перестраивать себя всякий раз, когда изменяются свойства этих объектов @Published.
Например, этот код является объектом Observable, который запускает таймер, который запускает сетевой запрос каждую секунду и присваивает емурезультат этих запросов к свойству @Published
myData, что приведет к перестроению представления, которому принадлежит этот объект. Вероятно, очень плохая идея запускать сетевой запрос каждую секунду и предполагать, что он возвращается в правильном порядке, но если это действительно то, что вы хотите сделать, этот код сделает это.
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)
}
}