SlideShare a Scribd company logo
1 of 20
Download to read offline
distinctUntilChanged 
の使いどころ 
安宅正之 at ChatWork 株式会社 
2014/10/18 (Sat)
自己紹介 
• 安宅 正之 (あたか まさゆき / @at_aka) 
• 2014/04 より ChatWork株式会社 モバイルチーム 
• https://github.com/ataka 
• Blog: clmemo@aka http://at-aka.blogspot.com
状態管理フラグの 
変更を知りたいなら 
[RACObserve(self.viewModel, canFoo) 
distinctUntilChanged]; 
distinctUntilChanged が便利
One-to-One 
RAC(self.foo, enable) 
= RACObserve(self.viewModel, canFoo); 
• View と ViewModel の property が一対一対応
変換が必要な場合 
RAC(self.foo, title) 
= [RACObserve(self.viewModel, canFoo) 
map:^(NSNumber* enableNum) { 
BOOL enable = enableNum.boolValue; 
return (enable ? @“Foo” : @“Bar”); 
}]; 
• map で変換します
subscribeNext も使えます 
[RACObserve(self.viewModel, canFoo) 
subscribeNext:^(NSNumber* enableNum) { 
BOOL enable = enableNum.boolValue; 
self.foo = (enable ? @“Foo” : @“Bar”); 
}]; 
• property を代入できない場合も便利です 
[self.bar setTitle:@“Foo”]; 
• 循環参照が怖いです
循環参照が怖いです
rac_liftSelector 
[self 
rac_liftSelector:@selector(setFooTitle:) 
withSignals:RACObserve(self.viewModel, canFoo), 
nil]; 
! 
- (void)setFooTitle:(BOOL)enable 
{ 
self.foo.title = (enable ? @“Foo” : @“Bar”); 
} 
• weakSelf いらず。循環参照の恐怖から解放 
• コードの可読性アップ!
RACSignal* を外に出す 
RACSignal* canFooSignal = 
RACObserve(self.viewModel, canFoo); 
[self rac_liftSelector:@selector(setFooTitle:) 
withSignals:canFooSignal, nil]; 
! 
- (void)setFooTitle:(BOOL)enable { … } 
• Signal が再利用可能になりました
宣伝 
ChatWork にはライブ機能 
があります
ChatWork Live プラン 
ビデオチャット 
制限人数音声チャット 
フリー2 人YES 
パーソナル4 人YES 
ビジネス14 人YES
仕様 
• プランはライブ・ユーザーの中で最も高いプランが 
適用される 
• 制限人数を越えると、音声チャットへ移行する
ビデオ・ビュー 
カメラ ON/OFF 
フロント/バック・トグル
一つのシグナルで複数の処理 
RACSignal* canVideoChatSignal = 
RACObserve(self.viewModel, canVideoChat); 
[self.cameraOnButton // Camera ON/OFF 
rac_liftSelector:@selector(setEnabled:) 
withSignals:canVideoChatSignal, nil]; 
[self.cameraChangeButton // Front/Back Camera 
rac_liftSelector:@selector(setEnabled:) 
withSignals:canVideoChatSignal, nil]; 
[self rac_liftSelector:@selector(setVideo:) 
withSignals:canVideoChatSignal, nil]; 
! 
- (void)setVideo:(BOOL)canVideoChat { … }
構成 
View ViewModel Model 
ユーザーのプランを確認 
ビデオチャット可能かPlanManagerModel 
cなa?nVideoChat 
ユーザーが入室しました 
ユーザーが入室しました 
ServiceModel 
ReactiveCocoa 
Storyboard LiveViewModel 
LiveViewController 
ユーザー入室 
viewModel.canVideoChat 
ユーザー入室 
ユーザーが入室するたびに RACSignal が飛ぶ
シグナルを 
変更された時にだけ 
受け取りたい
それ 
distinctUntilChanged 
で出来るよ
修正版シグナル 
RACSignal* canVideoChatSignal = 
[RACObserve(self.viewModel, canVideoChat) 
distinctUntilChanged]; 
安全なシグナルができました
まとめ 
1. 処理が複雑になるなら rac_liftSelector を使う 
2. 複数の処理に別れるなら RACSignal* を作る 
3. シグナルの変更だけ知りたければ 
distinctUntilChanged を使う
ご清聴 
ありがとうございます

More Related Content

Viewers also liked

La noción del medio
La noción del medioLa noción del medio
La noción del medioIsabo Fierro
 
El conflicto sobre la educación
El conflicto sobre la educaciónEl conflicto sobre la educación
El conflicto sobre la educaciónIsabo Fierro
 
Una didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jeanUna didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jeanIsabo Fierro
 
La competencia como organizadora
La competencia como organizadoraLa competencia como organizadora
La competencia como organizadoraIsabo Fierro
 
Magazine research, magazines similar to mine
Magazine research, magazines similar to mineMagazine research, magazines similar to mine
Magazine research, magazines similar to mineHollySheldon
 
Self-Injurious Behavior
Self-Injurious BehaviorSelf-Injurious Behavior
Self-Injurious Behaviorfaulkss
 
ReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArrayReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArray正之 安宅
 
La historia del curriculum
La historia del curriculumLa historia del curriculum
La historia del curriculumIsabo Fierro
 
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools WorkshopLitercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools WorkshopPeter Bellisle
 
Estrategias de enseñanza
Estrategias de enseñanzaEstrategias de enseñanza
Estrategias de enseñanzaIsabo Fierro
 
Commit Log in English
Commit Log in EnglishCommit Log in English
Commit Log in English正之 安宅
 
Media film terminology presentation
Media film terminology presentationMedia film terminology presentation
Media film terminology presentationHollySheldon
 

Viewers also liked (20)

La noción del medio
La noción del medioLa noción del medio
La noción del medio
 
El conflicto sobre la educación
El conflicto sobre la educaciónEl conflicto sobre la educación
El conflicto sobre la educación
 
Una didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jeanUna didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jean
 
Spring Symposium
Spring Symposium Spring Symposium
Spring Symposium
 
La competencia como organizadora
La competencia como organizadoraLa competencia como organizadora
La competencia como organizadora
 
Magazine research, magazines similar to mine
Magazine research, magazines similar to mineMagazine research, magazines similar to mine
Magazine research, magazines similar to mine
 
Self-Injurious Behavior
Self-Injurious BehaviorSelf-Injurious Behavior
Self-Injurious Behavior
 
ReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArrayReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArray
 
Disability
DisabilityDisability
Disability
 
Gebeurtenis
GebeurtenisGebeurtenis
Gebeurtenis
 
La historia del curriculum
La historia del curriculumLa historia del curriculum
La historia del curriculum
 
Toys ar alive
Toys ar aliveToys ar alive
Toys ar alive
 
13207857 pps7
13207857 pps713207857 pps7
13207857 pps7
 
Mapas mentales
Mapas mentalesMapas mentales
Mapas mentales
 
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools WorkshopLitercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
 
Nozzles
NozzlesNozzles
Nozzles
 
Estrategias de enseñanza
Estrategias de enseñanzaEstrategias de enseñanza
Estrategias de enseñanza
 
Commit Log in English
Commit Log in EnglishCommit Log in English
Commit Log in English
 
Portafolio digital
Portafolio digitalPortafolio digital
Portafolio digital
 
Media film terminology presentation
Media film terminology presentationMedia film terminology presentation
Media film terminology presentation
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

distinctUntilChanged の使いどころ