最近 ReactiveCocoa を使いまくってます。そのなかで調べた Signal の使い方イディオムのメモです。

RACCommand で検索処理とかしてるときに、ローディング画面やインジケータを表示したいということがあると思います。そういうときに使える Signal のイディオムです。コードは Swift で書いています。

MVVM で viewModel が searchCommand を実装しているとします。また、ローディングインジケータの表示には MBProgressHUD を使っているとします。

MyViewController#viewDidLoad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
searchButton.rac_command = viewModel.searchCommand
searchButton.rac_command.executing
    .subscribeNext({ [weak self] (executing) in
        if let weakSelf = self {
            if executing as Bool {
                MBProgressHUD.showHUDAddedTo(weakSelf.view, animated: true)
            } else {
                MBProgressHUD.hideHUDForView(weakSelf.view, animated: true)
            }
        }
    })
searchButton.rac_command.errors
    .subscribeNext({ (error) in
        // エラー時のメッセージ表示処理
        println(error.localizedDescription)
    })

executing Signal はこういう風につかうんですね。