RACCommand は エラー時も正常終了時も Completed が呼ばれる
class API {
class func rac_login() -> RACSignal {
return RACSignal.createSignal({ (subscriber) in
// API call
if error != nil {
subscriber.sendError(error)
} else {
subscriber.sendCompleted()
}
return nil
})
}
}
let command = RACCommand(signalBlock: { _ in API.rac_login() })
command.executionSignals.subscribeNext({
let signal = $0 as RACSignal
signal.subscribeCompleted({ println("Error時もCompleted時もよばれちゃう。。") })
})
command.errors.subscribeNext({ println("こっちは Error時だけ呼ばれる \($0)") })
RACCommand の signal が sendError の時も sendCompleted も subscribeCompleted に入ってきてしまうことを確認するコードです。
エラーが起こった時には、subscribeCompleted と errors.subscribeNext の両方が呼ばれてしまい、エラーの時と正常終了時とで、処理をきっちり分けたいときとかに困っちゃいました。。
エラー時と正常終了時で処理を分けたいときは
しかたがないので、API の結果を送るところで
class func rac_login() -> RACSignal {
return RACSignal.createSignal({ (subscriber) in
// API call
if error != nil {
subscriber.sendError(error)
} else {
subscriber.sendNext(true)
subscriber.sendCompleted()
}
return nil
})
}
ってして、executionSignals.flatten() で対応しました。。
command.executionSignals.flatten().subscribeNext({ println("こっちは正常終了の時だけ呼ばれる \($0)") })
command.errors.subscribeNext({ println("こっちはエラーの時だけ呼ばれる \($0)") })