Submit Search
Upload
distinctUntilChanged の使いどころ
•
1 like
•
2,873 views
正之 安宅
Follow
ReactiveCocoa にある distinctUntilChanged の使い方の説明です。 ReactiveCocoa Tokyo (2014-10-18) LT 発表資料
Read less
Read more
Technology
Report
Share
Report
Share
1 of 20
Download now
Download to read offline
Recommended
Nextjs 9.5~ の Static Generation について
Nextjs 9.5~ の Static Generation について
KojiUegaki
FactoryGirl入門
FactoryGirl入門
Shigeru UCHIYAMA
Textile Companies(EID Intern, GE Power & Water (RGM) Industrial System )
Textile Companies(EID Intern, GE Power & Water (RGM) Industrial System )
Mostafa Elmeshad
Colin Ferguson
Colin Ferguson
Mourad Badr-eddine
Reporte de practica. isa
Reporte de practica. isa
Isabo Fierro
A presentation to show different types of camera
A presentation to show different types of camera
HollySheldon
Planeaciones
Planeaciones
Isabo Fierro
3er reporte
3er reporte
Isabo Fierro
Recommended
Nextjs 9.5~ の Static Generation について
Nextjs 9.5~ の Static Generation について
KojiUegaki
FactoryGirl入門
FactoryGirl入門
Shigeru UCHIYAMA
Textile Companies(EID Intern, GE Power & Water (RGM) Industrial System )
Textile Companies(EID Intern, GE Power & Water (RGM) Industrial System )
Mostafa Elmeshad
Colin Ferguson
Colin Ferguson
Mourad Badr-eddine
Reporte de practica. isa
Reporte de practica. isa
Isabo Fierro
A presentation to show different types of camera
A presentation to show different types of camera
HollySheldon
Planeaciones
Planeaciones
Isabo Fierro
3er reporte
3er reporte
Isabo Fierro
La noción del medio
La noción del medio
Isabo Fierro
El conflicto sobre la educación
El conflicto sobre la educación
Isabo Fierro
Una didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jean
Isabo Fierro
Spring Symposium
Spring Symposium
Peter Bellisle
La competencia como organizadora
La competencia como organizadora
Isabo Fierro
Magazine research, magazines similar to mine
Magazine research, magazines similar to mine
HollySheldon
Self-Injurious Behavior
Self-Injurious Behavior
faulkss
ReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArray
正之 安宅
Disability
Disability
HollySheldon
Gebeurtenis
Gebeurtenis
Stef Ballet
La historia del curriculum
La historia del curriculum
Isabo Fierro
Toys ar alive
Toys ar alive
toysaralive
13207857 pps7
13207857 pps7
meatballliu
Mapas mentales
Mapas mentales
Isabo Fierro
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Peter Bellisle
Nozzles
Nozzles
Mostafa Elmeshad
Estrategias de enseñanza
Estrategias de enseñanza
Isabo Fierro
Commit Log in English
Commit Log in English
正之 安宅
Portafolio digital
Portafolio digital
Alexander Boscan
Media film terminology presentation
Media film terminology presentation
HollySheldon
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
More Related Content
Viewers also liked
La noción del medio
La noción del medio
Isabo Fierro
El conflicto sobre la educación
El conflicto sobre la educación
Isabo Fierro
Una didáctica fundada en la psicología de jean
Una didáctica fundada en la psicología de jean
Isabo Fierro
Spring Symposium
Spring Symposium
Peter Bellisle
La competencia como organizadora
La competencia como organizadora
Isabo Fierro
Magazine research, magazines similar to mine
Magazine research, magazines similar to mine
HollySheldon
Self-Injurious Behavior
Self-Injurious Behavior
faulkss
ReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArray
正之 安宅
Disability
Disability
HollySheldon
Gebeurtenis
Gebeurtenis
Stef Ballet
La historia del curriculum
La historia del curriculum
Isabo Fierro
Toys ar alive
Toys ar alive
toysaralive
13207857 pps7
13207857 pps7
meatballliu
Mapas mentales
Mapas mentales
Isabo Fierro
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Peter Bellisle
Nozzles
Nozzles
Mostafa Elmeshad
Estrategias de enseñanza
Estrategias de enseñanza
Isabo Fierro
Commit Log in English
Commit Log in English
正之 安宅
Portafolio digital
Portafolio digital
Alexander Boscan
Media film terminology presentation
Media film terminology presentation
HollySheldon
Viewers also liked
(20)
La noción del medio
La noción del medio
El 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 jean
Spring Symposium
Spring Symposium
La competencia como organizadora
La competencia como organizadora
Magazine research, magazines similar to mine
Magazine research, magazines similar to mine
Self-Injurious Behavior
Self-Injurious Behavior
ReactiveCocoa vs NSMutableArray
ReactiveCocoa vs NSMutableArray
Disability
Disability
Gebeurtenis
Gebeurtenis
La historia del curriculum
La historia del curriculum
Toys ar alive
Toys ar alive
13207857 pps7
13207857 pps7
Mapas mentales
Mapas mentales
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Litercay For Everyone March 20, 2014 Providence Public Schools Workshop
Nozzles
Nozzles
Estrategias de enseñanza
Estrategias de enseñanza
Commit Log in English
Commit Log in English
Portafolio digital
Portafolio digital
Media film terminology presentation
Media film terminology presentation
Recently uploaded
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
デジタル・フォレンジックの最新動向(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...
博三 太田
Recently uploaded
(9)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
distinctUntilChanged の使いどころ
1.
distinctUntilChanged の使いどころ 安宅正之
at ChatWork 株式会社 2014/10/18 (Sat)
2.
自己紹介 • 安宅
正之 (あたか まさゆき / @at_aka) • 2014/04 より ChatWork株式会社 モバイルチーム • https://github.com/ataka • Blog: clmemo@aka http://at-aka.blogspot.com
3.
状態管理フラグの 変更を知りたいなら [RACObserve(self.viewModel,
canFoo) distinctUntilChanged]; distinctUntilChanged が便利
4.
One-to-One RAC(self.foo, enable)
= RACObserve(self.viewModel, canFoo); • View と ViewModel の property が一対一対応
5.
変換が必要な場合 RAC(self.foo, title)
= [RACObserve(self.viewModel, canFoo) map:^(NSNumber* enableNum) { BOOL enable = enableNum.boolValue; return (enable ? @“Foo” : @“Bar”); }]; • map で変換します
6.
subscribeNext も使えます [RACObserve(self.viewModel,
canFoo) subscribeNext:^(NSNumber* enableNum) { BOOL enable = enableNum.boolValue; self.foo = (enable ? @“Foo” : @“Bar”); }]; • property を代入できない場合も便利です [self.bar setTitle:@“Foo”]; • 循環参照が怖いです
7.
循環参照が怖いです
8.
rac_liftSelector [self rac_liftSelector:@selector(setFooTitle:)
withSignals:RACObserve(self.viewModel, canFoo), nil]; ! - (void)setFooTitle:(BOOL)enable { self.foo.title = (enable ? @“Foo” : @“Bar”); } • weakSelf いらず。循環参照の恐怖から解放 • コードの可読性アップ!
9.
RACSignal* を外に出す RACSignal*
canFooSignal = RACObserve(self.viewModel, canFoo); [self rac_liftSelector:@selector(setFooTitle:) withSignals:canFooSignal, nil]; ! - (void)setFooTitle:(BOOL)enable { … } • Signal が再利用可能になりました
10.
宣伝 ChatWork にはライブ機能
があります
11.
ChatWork Live プラン
ビデオチャット 制限人数音声チャット フリー2 人YES パーソナル4 人YES ビジネス14 人YES
12.
仕様 • プランはライブ・ユーザーの中で最も高いプランが
適用される • 制限人数を越えると、音声チャットへ移行する
13.
ビデオ・ビュー カメラ ON/OFF フロント/バック・トグル
14.
一つのシグナルで複数の処理 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 { … }
15.
構成 View ViewModel
Model ユーザーのプランを確認 ビデオチャット可能かPlanManagerModel cなa?nVideoChat ユーザーが入室しました ユーザーが入室しました ServiceModel ReactiveCocoa Storyboard LiveViewModel LiveViewController ユーザー入室 viewModel.canVideoChat ユーザー入室 ユーザーが入室するたびに RACSignal が飛ぶ
16.
シグナルを 変更された時にだけ 受け取りたい
17.
それ distinctUntilChanged で出来るよ
18.
修正版シグナル RACSignal* canVideoChatSignal
= [RACObserve(self.viewModel, canVideoChat) distinctUntilChanged]; 安全なシグナルができました
19.
まとめ 1. 処理が複雑になるなら
rac_liftSelector を使う 2. 複数の処理に別れるなら RACSignal* を作る 3. シグナルの変更だけ知りたければ distinctUntilChanged を使う
20.
ご清聴 ありがとうございます
Download now