[英]RxSwift, MVVM, Alamofire/Moya. Update ticker using interval
Currently learning RxSwift (Rx in general). 当前正在学习RxSwift(通常为Rx)。 I want to update a UILabel regularly with the latest ticker price. 我想定期以最新的报价来更新UILabel。
How can .interval and the updateTicker function every period and then update the UILabel accordingly. .interval和updateTicker如何在每个周期起作用,然后相应地更新UILabel。
ViewController.swift ViewController.swift
class ViewController: UIViewController {
private let disposeBag = DisposeBag()
// Dependencies
private var viewModel = ViewModel()
// Outlets
@IBOutlet var tickerLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
setupViewModel()
}
func setupViewModel() {
self.viewModel.ticker.asObservable()
.bind(to: self.tickerLabel.rx.text)
.addDisposableTo(self.disposeBag)
}
}
ViewModel.swift ViewModel.swift
struct ViewModel {
private let disposeBag = DisposeBag()
let provider = RxMoyaProvider<StockAPI>()
var ticker = Variable<String>("")
init() {
startTimer()
// ???
}
func startTimer() -> Observable<Int> {
return Observable<Int>.interval(5, scheduler: MainScheduler.instance)
}
func updateTicker() {
_ = self.provider.request(.ticker(symbol: "AAPL")).subscribe { (event) in
switch event {
case .next(let response):
print(response)
// do something with the data
case .error(let error):
// handle the error
print(error)
break
default:
break
}
}
}
Maybe something like this 也许像这样
var ticker = Observable.just("")
func startTimer() {
self.ticker = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.map({ _ in self.updateTicker() })
}
The func updateTicker will need return a String. func updateTicker将需要返回一个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.