2017-04-26 3 views
0

のように失敗を返しません。現在、私はReactiveSwiftに興味があり、プロジェクトのネットワークアクションのために追加しようとしています。しかし、observeResultメソッドを使ってアクションリターン型についていくつかの問題があります。ReactiveSwiftの動作observeResultは、

ビューモデル:

最終クラスTestViewModel:ビューモデル{

var getListAction: Action<Void, Void, APIError>! 

var arr = NSMutableArray() 

override init() { 

    super.init() 

    self.getListBuild() 

} 

func getListBuild() { 

    getListAction = Action<Void, Void, APIError> { _ in 
     let signalProducer = SignalProducer<Void, APIError> { observer, disposable in 
      self.getList(observer) 
     } 
     return signalProducer 
    } 

    getListAction.apply().start() 
} 


func getList(_ observer: Observer<Void, APIError>) { 

    Network<UserDetailInfo>().requestList(router: RegistrationRouter(endpoint:.Login())).take(during: lifetime).startWithResult { (result) in 
     switch result { 
     case let .success(value): 
      self.arr = value as! NSMutableArray 
      print("success") 
      observer.sendCompleted() 
     case let .failure(error): 
      print("abort: \(String(describing: error.message))") 
      observer.send(error: error) 
     } 
    } 
} 

}

と私はこのようにそれを管理しようとしているコントローラから:

最終的なクラスのViewController:表示{

var viewModel: TestViewModel? 

func bindViewModel() { 

    self.viewModel = TestViewModel() 

    self.viewModel?.getListAction.events.take(during: lifetime).observeResult { (result) in 
     switch result { 
     case .success(_): 
      print("success") 
      print(self.viewModel?.arr.count as Any) 
      break 
     case let .failure(error): 
      print(error.localizedDescription); 
      break 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.bindViewModel() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

}

ViewModelに、このような状況でGETLISTメソッドから失敗を返すのにもかかわらず:

方法が成功を返されたが、そうではありません。それは失敗するはずです。この問題についての問題点を教えてください。

答えて

1

あなたが観測したeventストリームは決して失敗を返しません。そのドキュメントを参照してください:

/// A signal of all events generated from applications of the Action. 
/// 
/// In other words, this will send every `Event` from every signal generated 
/// by each SignalProducer returned from apply() except `ActionError.disabled`. 
public let events: Signal<Event<Output, Error>, NoError> 

成功した値を観察するために、あなたはvaluesに加入してobserveValuesを使いたいでしょうに:

self.viewModel?.getListAction 
    .values 
    .take(during: lifetime) 
    .observeValues { [weak self] value in 
     // always successful 
    } 

エラーを観察したい場合は、errorsに加入してobserveValuesを使用することができます。

self.viewModel?.getListAction 
    .errors 
    .take(during: lifetime) 
    .observeValues { [weak self] error in 
     // error event 
    } 
関連する問題