2017-06-22 73 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

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

也许这样的事情

var ticker = Observable.just("") 

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

的FUNC updateTicker需要返回一个字符串。