简体   繁体   English

RxSwift,MVVM,Alamofire / Moya。 使用间隔更新股票行情

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM