【问题标题】:RxSwift, MVVM, Alamofire/Moya. Update ticker using intervalRxSwift、MVVM、Alamofire/Moya。使用间隔更新代码
【发布时间】:2017-11-26 09:26:47
【问题描述】:

目前正在学习 RxSwift(一般为 Rx)。我想用最新的股票价格定期更新 UILabel。

.interval 和 updateTicker 函数如何在每个周期都起作用,然后相应地更新 UILabel。

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

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
        }
    }
}

【问题讨论】:

    标签: ios swift mvvm reactive-programming


    【解决方案1】:

    可能是这样的

    var ticker = Observable.just("")
    
    func startTimer() {
        self.ticker = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
            .map({ _ in self.updateTicker() })
    }
    

    func updateTicker 需要返回一个字符串。

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 2016-03-14
      • 2018-12-05
      • 1970-01-01
      • 2017-01-12
      • 2019-03-18
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多