2017-06-22 10 views
0

現在、RxSwift(一般的にRx)を学習しています。最新のティッカー価格でUILabelを定期的に更新したいと思います。RxSwift、MVVM、Alamofire/Moya。区間を使用してティッカーを更新

どのように.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この

var ticker = Observable.just("") 

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

FUNCをupdateTickerよう

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

答えて

0

たぶん何かがStringを返す必要があるでしょう。

関連する問題