SlideShare a Scribd company logo
“Next	Step”of	becoming	familiar	with

RxSwift	&	MVVM	Pattern.
Fumiya	Sakai	(Just1factory)
2018/12/18	potatotips	#57	@	istyle	Inc.
自己紹介
・Fumiya	Sakai
・Mobile	App	Engineer
アカウント:
・Twitter:	https://twitter.com/fumiyasac

・Facebook:	https://www.facebook.com/fumiya.sakai.37

・Github:	https://github.com/fumiyasac	

・Qiita:	https://qiita.com/fumiyasac@github
発表者:
・Born	on	September	21,	1984
これまでの歩み:
Web	Designer
2008	~	2010
Web	Engineer
2012	~	2016
App	Engineer
2017	~	Present
ほんの少しだけ告知と宣伝
「少しの工夫とアイデアでできる表現集」として、これまでサンプル開発や実務の
中で培ったノウハウ等から、UI実装いくつかのまとまったサンプル実装を例にUI構
築をする上で重要な実装ポイントやアイデアを紹介していく形式にしてみました。
収録サンプル:
https://github.com/fumiyasac/ios_ui_recipe_showcase
現在Boothにて販売中です(近日アップデート予定)	¥1,000
同人誌「iOSアプリ開発	UI実装であると嬉しいレシピブック」を書きました。
https://booth.pm/ja/items/1021745
概要:
今回取り組む事になったきっかけ
この記事を書いた時から1年以上の月日が流れてしまった…危機感。
1年前に書いた記事の知識から1歩踏み出す:
RxSwiftでの実装練習の記録ノート(前編:Observerパターンの例とUITableViewの例)

https://qiita.com/fumiyasac@github/items/90d1ebaa0cd8c4558d96

RxSwiftでの実装練習の記録ノート(後編:DriverパターンとAPIへの通信を伴うMVVM構成のサンプル例)

https://qiita.com/fumiyasac@github/items/da762ea512484a8291a3
自分が試してみたいUIライブラリと組み合わせた実装を使ってRxSwiftを利用したサンプルを作る
以前の復習も込めて応用した実装を試みる:
この記事ではあくまで既存のサンプルコードに関する解説とRxSwiftの基本理解についての解説まで
※	記事自体も年末にテコ入れします
※	RxSwiftの	Observer	/	Driver	パターンを使用
今回の発表でのサンプルコード
実際に動かせるコードもご用意しました	&	解説コメントも残しました。
https://github.com/fumiyasac/RxSwiftUIExample
Storyboardの構成
実装部分に集中するため構成は比較的シンプルで基本的な形にしています。	
MainViewControllerの
Floating Menuから遷移
ContainerViewで表示
ライブラリを使った
Floating Menu
データとUIの関連性
Model	-	ViewModel	-	Viewにおける処理と役割の概要の図解になります。	
状態更新のリクエスト
ViewController ViewModel Model
NewYorkTimesProductionAPI
利用するデータの作成
※ ViewModelでAPIリクエストを実行する場合
UI側への変更を伝える 利用するデータの受取
利用したUI構築用ライブラリの一覧
下記の様なUIライブラリを活用して構築をしています。
Floaty:
Androidの様なフローティングメニューを実現
DeckTransition:
Apple	Musicの様なハーフモーダル表示を実現
AnimatedCollectionViewLayout:
UICollectionViewを動かす際に様々な動きをつける
全体の画面構成を決めるものからオマケ的な要素のものまで
アニメーションや表現が綺麗でかつ取り扱い易そう(RxSwiftの実装と調和しそう)なものを選びました。
FontAwesome.swift:
「Font	Awesome」アイコンを利用する
BTNavigationDropdownMenu:
UINavigationBarにドロップダウンメニューを実現
Toast-Swift:
Androidの様なToast型のポップアップ表示をする
UICollectionViewをベースにしたカルーセルを表示する
UI部分に関するちょっとした考慮をRxSwiftで上手に表現する。
カルーセルの回転部分の表現は
ライブラリ: AnimatedCollectionViewLayoutで実現
// ViewController側で利用するためのプロパティ
let featuredLists: Observable<[FeaturedModel]>!
let shouldHidePreviousButton = BehaviorRelay<Bool>(value: true)
let shouldHideNextButton = BehaviorRelay<Bool>(value: false)
let currentIndex = BehaviorRelay<Int>(value: 0)
前へ・次のボタンの表示状態と
現在の表示位置に応じた振る舞い
ボタン押下
ViewModelに定義したBehaviorRelayの値変化とUIが関連する
① ボタンタップ処理でViewModelのプロパティを更新
② 変更されたViewModelのプロパティを元に
View要素の状態が決定される
ドロップダウンメニューから表示内容を変更する
UIライブラリと組み合わせた表現をRxSwiftで上手に表現する。
// ViewController側で利用するためのプロパティ
let allTitles: Observable<[String]>!
let selectedInformation = BehaviorRelay<InformationModel?>(value: nil) タイトルを押下すると内容が切り替わる
項目選択
ドロップダウンメニューを表示する表現について
はBTNavigationDropdownMenuを利用
ViewModelに定義したBehaviorRelayの値変化とUIが関連する
② タップ処理でViewModelのプロパティを更新
③ 変更されたViewModelのプロパティ
を元にView要素の状態が決定される
※ BTNavigationDropdownMenuに関する初期設定を行う部分。
① 表示要素の初期設定
初回表示状態からボタンを押すと末尾に10件ずつデータを表示する
API通信を利用してデータを取得して伴う表示部分の調整を実行する。
// ViewController側で利用するためのプロパティ
let isLoading = BehaviorRelay<Bool>(value: false)
let isError = BehaviorRelay<Bool>(value: false)
let recentNewsLists = BehaviorRelay<[RecentNewsModel]>(value: [])
変数: resentNewsListsへ10件ずつ値が追
加されてContainerViewの高さも増加する
ボタン押下
API通信でデータを取得する部分に関するコード例
① Single<JSON>型として、リクエストが1度だけ成功
か失敗かのレスポンスを返すような形にする
② ViewModel部分でAPI通信処理を実行
し結果に応じてプロパティを更新する
※ BehaviorRelay<[RecentNewsModel]>へ追記
インクリメンタルサーチで該当したデータを最大10件表示する
入力された文字列の長さを考慮しながらAPIのリクエストを実行する。
// ViewController側で利用するためのプロパティ
let isLoading = BehaviorRelay<Bool>(value: false)
let isError = BehaviorRelay<Bool>(value: false)
let searchNewsLists = BehaviorRelay<[SearchNewsModel]>(value: [])
3文字以上
入力する
// 検索ボックスの値変化を監視対象にする
private var searchBarText: Observable<String> {
// ① 3文字未満のキーワードの場合は受け付けない
// ② APIリクエストの際に0.5秒のバッファを持たせる
return keywordSearchBar.rx.text
.filter { $0 != nil }
.map { $0! }
.filter { $0.count >= 3 }
.debounce(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
}
必要以上のAPIリクエストをしない様に配慮
※ debounce / throttle を上手に活用
今回の発表内容の補足と詳細
本日お話した内容に関しては下記の記事にもまとめております。
https://qiita.com/fumiyasac@github/items/e426d321fbb8ab846bb6
今回のまとめ
RxSwiftとMVVMパターンの組み合わせとUI実装との連結いいと思った!
Step1)	基本のおさらい
まずはRxSwiftの復習

・Observerパターン

・Driverパターン

・頻出のOperatorの理解
このサンプル開発を通じて:	
データ層やUIと関わり合いがある層に関する構成をアーキテクチャも混みで整理した形にすることで、

どの値変化によって関連するUI要素が変化するかの見通しや関係性を持っているか?ということが見

える形になる。それによってUI実装という観点からも大きくメリットがあると認識できた。
Step2)	実装に関する研究
実装例の考察やサンプル研究

・想定している動き

・MVVMパターンの理解

・新旧バージョンの差分
Step3)	実装とUIの結合
ショーケース的なサンプル実装

・UIとViewModel実装の結合

・Operatorの利用方法の理解

・UI表現とRxSwiftの調和
Thank	you	for	listening	!

More Related Content

PDF
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
Fumiya Sakai
 
PDF
最近の業務やAndroid関連のインプットと振り返り
Fumiya Sakai
 
PDF
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
Fumiya Sakai
 
PDF
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
Fumiya Sakai
 
PDF
2022年の抱負とここ数年続けてきたインプット
Fumiya Sakai
 
PDF
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
Fumiya Sakai
 
PDF
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Fumiya Sakai
 
PDF
アプリ開発におけるテキスト装飾のアイデア集
Fumiya Sakai
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
Fumiya Sakai
 
最近の業務やAndroid関連のインプットと振り返り
Fumiya Sakai
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
Fumiya Sakai
 
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
Fumiya Sakai
 
2022年の抱負とここ数年続けてきたインプット
Fumiya Sakai
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
Fumiya Sakai
 
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Fumiya Sakai
 
アプリ開発におけるテキスト装飾のアイデア集
Fumiya Sakai
 

What's hot (20)

PDF
少しずつキャッチアップしていくAndroidアプリ開発
Fumiya Sakai
 
PDF
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
Fumiya Sakai
 
PDF
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
Fumiya Sakai
 
PDF
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
Fumiya Sakai
 
PDF
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
Fumiya Sakai
 
PDF
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
Fumiya Sakai
 
PDF
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
Fumiya Sakai
 
PDF
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
 
PDF
Approach of Prototyping for making Application User Interface about iOS
Fumiya Sakai
 
PDF
iOSのUI構築小技集(小さなとこから始められる編)
Fumiya Sakai
 
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
Fumiya Sakai
 
PDF
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fumiya Sakai
 
PDF
SwiftとReactNativeで似たようなUIを作った際の記録
Fumiya Sakai
 
PDF
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
Fumiya Sakai
 
PDF
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
Megumi Otani(Czenhe)
 
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
Fumiya Sakai
 
PPT
Abc2013 spring appinventorユーザー会
Takeaki Tada
 
PDF
2017823 pythonを始めよう
shouta yoshikai
 
PDF
まずはできるところから始める UnitTestとテストができる実装について
Fumiya Sakai
 
PDF
Swift勉強会2
Hikari Yanagihara
 
少しずつキャッチアップしていくAndroidアプリ開発
Fumiya Sakai
 
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
Fumiya Sakai
 
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
Fumiya Sakai
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
Fumiya Sakai
 
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
Fumiya Sakai
 
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
Fumiya Sakai
 
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
Fumiya Sakai
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
 
Approach of Prototyping for making Application User Interface about iOS
Fumiya Sakai
 
iOSのUI構築小技集(小さなとこから始められる編)
Fumiya Sakai
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
Fumiya Sakai
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fumiya Sakai
 
SwiftとReactNativeで似たようなUIを作った際の記録
Fumiya Sakai
 
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
Fumiya Sakai
 
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
Megumi Otani(Czenhe)
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
Fumiya Sakai
 
Abc2013 spring appinventorユーザー会
Takeaki Tada
 
2017823 pythonを始めよう
shouta yoshikai
 
まずはできるところから始める UnitTestとテストができる実装について
Fumiya Sakai
 
Swift勉強会2
Hikari Yanagihara
 
Ad

Similar to RxSwiftとMVVMパターンと仲良くなる次のステップ (20)

PDF
RxSwiftでの実装練習の記録ノートとはじめの一歩
Fumiya Sakai
 
PDF
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
Fumiya Sakai
 
PDF
アプリUI勉強会 in ネットイヤーグループ
Kenichi Suzuki
 
PDF
少しずつ手厚くして不具合や仕様漏れを防ぐために
Fumiya Sakai
 
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
Yusuke SAITO
 
PPTX
Movable Type Data API Swiftアプリ作成事例
FromF
 
PDF
カスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプル
Fumiya Sakai
 
PPTX
MVVM入門
Kazutoshi Urabe
 
PDF
Ext JS version 5 を始めよう
久司 中村
 
PDF
2012 12-17-titanium meetupvol4
Hiroshi Oyamada
 
PDF
Xamarin で ReactiveUI を使ってみた
Hironov OKUYAMA
 
PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
PDF
効率的なアプリ開発のベストプラクティス
yayugu
 
PDF
Sansan様 登壇資料
Daisuke Nagata
 
PDF
iPhone、Android両対応アプリ開発講座 概論
Takakuni Furukawa
 
PDF
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...
yugosugiyama
 
PPTX
Xamarin.iOS/android+F#で作る関数型アプリ
Masuda Tomoaki
 
PDF
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
Akiko Ohtsuka
 
PDF
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Fumiya Sakai
 
PDF
RxSwift
Kosuke Usami
 
RxSwiftでの実装練習の記録ノートとはじめの一歩
Fumiya Sakai
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
Fumiya Sakai
 
アプリUI勉強会 in ネットイヤーグループ
Kenichi Suzuki
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
Fumiya Sakai
 
iPhoneアプリ開発の歩き方〜Swift編〜
Yusuke SAITO
 
Movable Type Data API Swiftアプリ作成事例
FromF
 
カスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプル
Fumiya Sakai
 
MVVM入門
Kazutoshi Urabe
 
Ext JS version 5 を始めよう
久司 中村
 
2012 12-17-titanium meetupvol4
Hiroshi Oyamada
 
Xamarin で ReactiveUI を使ってみた
Hironov OKUYAMA
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
効率的なアプリ開発のベストプラクティス
yayugu
 
Sansan様 登壇資料
Daisuke Nagata
 
iPhone、Android両対応アプリ開発講座 概論
Takakuni Furukawa
 
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...
yugosugiyama
 
Xamarin.iOS/android+F#で作る関数型アプリ
Masuda Tomoaki
 
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
Akiko Ohtsuka
 
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Fumiya Sakai
 
RxSwift
Kosuke Usami
 
Ad

More from Fumiya Sakai (9)

PDF
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Fumiya Sakai
 
PDF
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
Fumiya Sakai
 
PDF
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
Fumiya Sakai
 
PDF
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
Fumiya Sakai
 
PDF
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Fumiya Sakai
 
PDF
Hint of a little ingenuity about UI.
Fumiya Sakai
 
PDF
メディアアプリでよく見る無限スクロールするタブの動きへの考察
Fumiya Sakai
 
PDF
書籍執筆からの今後に向けてのロードマップ
Fumiya Sakai
 
PDF
ReduxとSwiftの組み合わせ:改訂版
Fumiya Sakai
 
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Fumiya Sakai
 
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
Fumiya Sakai
 
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
Fumiya Sakai
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
Fumiya Sakai
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Fumiya Sakai
 
Hint of a little ingenuity about UI.
Fumiya Sakai
 
メディアアプリでよく見る無限スクロールするタブの動きへの考察
Fumiya Sakai
 
書籍執筆からの今後に向けてのロードマップ
Fumiya Sakai
 
ReduxとSwiftの組み合わせ:改訂版
Fumiya Sakai
 

Recently uploaded (11)

PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 

RxSwiftとMVVMパターンと仲良くなる次のステップ