SlideShare a Scribd company logo
1 of 21
2016/08/17
kyobashi.swift #2
@gomi_ningen
この実装には問題がある!
自己紹介
某ラビットハウス社で働く社畜 新3年生
・ Java, Scala, Swift, C#, PHP, F-BASIC など...
・ iOS開発初めて1年くらい
・ 日本ごちうさユーザーグループ(JGUG)
・ ごちうさ関連のエンジニアリングのお仕事依頼お待ちしております
🐰 時間がないので自己紹介は割愛します🐰
@gomi_ningen
今日話す内容
末尾呼び出しとその周辺のお話
1. 末尾呼び出し・末尾再帰とは?(3分)
簡単な関数の実装について考えながら、末尾再帰とは何かをおさらい
2. 再帰っぽいけど実はループな実装(3分)
ループならスタックの問題は発生しないので、再帰風にアルゴリズム
を実装できるが、実際はループになるようなコードを書いてみる
3. Swiftと末尾呼び出しのちょっと未来の話(3分)
Swift 4 とか
末尾呼び出し・末尾再帰とは
簡単な関数について考えていく
1 から n までの整数(0, 1, 2 ...)の和を返す関数 tri を実装したい
tri(n) = 0 + 1 + 2 + ... + (n -1) + n
簡単な関数について考えていく
1 から n までの整数(0, 1, 2 ...)の和を返す関数 tri を実装する
tri(n) = 0 + 1 + 2 + ... + (n -1) + n
だいたいこんなかんじ?
簡単な関数について考えていく
1 から n までの整数(0, 1, 2 ...)の和を返す関数 tri を実装する
tri(n) = 0 + 1 + 2 + ... + (n -1) + n
デカい数を引数にして呼び出すと死ぬ
➡︎ いわゆる スタックオーバーフロー というもの
簡単な関数について考えていく
1 から n までの整数(0, 1, 2 ...)の和を返す関数 tri を実装する
tri(n) = 0 + 1 + 2 + ... + (n -1) + n
実行中のサブルーチンに関する情報をスタックに積んでいくため、
関数から関数を呼び出しまくるとスタックから溢れてしまう
簡単な関数について考えていく
サブルーチン内で計算が完結していればスタックフレームは生成されな
いので、単純に while ループで書けばよい
コードとしてはちょっと見通しが悪い?
再帰でこれを実現する方法はないのか?
末尾呼び出し
あるルーチンが、他のルーチンを呼び出して戻り値を受け取ったとして、
それを返す以外の操作をしないとき、末尾呼び出しであるという
⬆︎ 言葉にするとややこしいがコードを見れば単純
末尾呼び出し
Swiftの処理系は、最適化オプションを有効にすると
ほぼほぼ末尾呼び出しをスタックフレームを生成しない形の
アセンブリコードに変換してくれる
(これを末尾呼び出しの除去とよんだりするらしい)
最適化あり: swiftc –O /path/to/file.swift
最適化なし: swiftc –Onone /path/to/file.swift
つまり先ほどの例の関数も、
末尾呼び出しの形にしてあげれば
再帰を使った形かつ大きな引数で
関数を呼び出すことができるはず!
簡単な関数を末尾呼び出しにする
else 句のほうが、末尾呼び出しになっている。特に自分自身を再帰的に
末尾呼び出しするとき、末尾再帰呼び出しという。
もちろん playground 上では最適化がかからないので、
でかい引数で呼び出すと死ぬ
この実装には問題がある!
iOS/OSXプロダクト開発上、問題が発生することは稀だと思うが
一応難癖をつけると、以下のような問題がある(ことにしておく)
・ 実際に末尾呼び出し除去がかかるという保証はない
・ playgroundでデカい引数で呼び出したいとしても無理
実際、前者は抽象的なライブラリを設計する開発者にとっては若干悩ま
しい部分があるかもしれない...
再帰っぽいけど実はループな実装
を作れば問題が解決する
準備: フレームワークの実装
再帰っぽいコードをループに変換するための下準備
関数の実装部
普通の再帰っぽい雰囲気
引数を 100000 で呼び出しても死なない!!!!!!!!!
ちょっと未来のSwiftの話
@tailrecアノテーションの導入
・ Scalaと同様の @tailrec アノテーションの導入提案 issue
・ Swift3 では、ほぼ間違いなく入らない
・ しかし、Swift4 では入る可能性はある
https://github.com/apple/swift-evolution/pull/103/files
まとめ
・ Swiftには末尾再帰除去を想定したコードであることを
明示的に宣言するための言語機能が存在しない
・ ほぼ末尾再帰的な記述でスタックフリーな実装をする
フレームワークは簡単に自作できる
・ とはいえ日常のSwiftプログラミングでこれを考慮しなければ
ならないケースは非常にまれである
・ コンビネータを大量に含むライブラリを書くときは考慮が必要
・ Swift4 に向けて Scala の @tailrec 的なアノテーションが
入るかどうかの検討が進む見通し

More Related Content

What's hot

人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemdUchio Kondo
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例Uchio Kondo
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate languageKouji Matsui
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしようKouji Matsui
 
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使うRyo Nagai
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話disc99_
 
ペパボのサービスとRuby
ペパボのサービスとRubyペパボのサービスとRuby
ペパボのサービスとRubyUchio Kondo
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ拓弥 遠藤
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト三七男 山本
 
Thread affinity and CPS
Thread affinity and CPSThread affinity and CPS
Thread affinity and CPSKouji Matsui
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーTomoya Kawanishi
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係yy yank
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftTomohiro Kumagai
 
Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01itouakihiro
 

What's hot (20)

人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemd
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate language
 
World plonedaylt
World plonedayltWorld plonedaylt
World plonedaylt
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
Hello Ruby
Hello RubyHello Ruby
Hello Ruby
 
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
ペパボのサービスとRuby
ペパボのサービスとRubyペパボのサービスとRuby
ペパボのサービスとRuby
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
 
GR-CITRUSの紹介
GR-CITRUSの紹介GR-CITRUSの紹介
GR-CITRUSの紹介
 
Thread affinity and CPS
Thread affinity and CPSThread affinity and CPS
Thread affinity and CPS
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
Osc2012 hiroshima
Osc2012 hiroshimaOsc2012 hiroshima
Osc2012 hiroshima
 
Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01
 

Viewers also liked

Lecture 7 organization structure- chapter 1 jamed a hall
Lecture 7  organization structure- chapter 1 jamed a hallLecture 7  organization structure- chapter 1 jamed a hall
Lecture 7 organization structure- chapter 1 jamed a hallHabib Ullah Qamar
 
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...Conferenceproceedings
 
BIO Paulo Cavalcanti (english version)
BIO Paulo Cavalcanti (english version)BIO Paulo Cavalcanti (english version)
BIO Paulo Cavalcanti (english version)Paulo Cavalcanti
 
Slovakia twinnspace
Slovakia twinnspaceSlovakia twinnspace
Slovakia twinnspacekuboajuro
 
Dive into apple music app
Dive into apple music appDive into apple music app
Dive into apple music appTakuro Hanawa
 
Uce metodologia de la investigacion
Uce metodologia de la investigacionUce metodologia de la investigacion
Uce metodologia de la investigacionKaterin Mtza
 
Scrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачиScrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачиIT61
 
This Time It's Personal: One-on-One Canvas Support
This Time It's Personal: One-on-One Canvas SupportThis Time It's Personal: One-on-One Canvas Support
This Time It's Personal: One-on-One Canvas SupportLSEngle
 
Postman tests in jenkins
Postman tests in jenkinsPostman tests in jenkins
Postman tests in jenkinsAlex Galkin
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийSQALab
 
Konsep Asas HE
Konsep Asas HEKonsep Asas HE
Konsep Asas HEteochaw
 

Viewers also liked (17)

Lecture 7 organization structure- chapter 1 jamed a hall
Lecture 7  organization structure- chapter 1 jamed a hallLecture 7  organization structure- chapter 1 jamed a hall
Lecture 7 organization structure- chapter 1 jamed a hall
 
Edward's C.V
Edward's C.VEdward's C.V
Edward's C.V
 
DECOWORLD
DECOWORLDDECOWORLD
DECOWORLD
 
25 Co Reference
25 Co Reference25 Co Reference
25 Co Reference
 
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...
The Effect of Movie Subtitling on Incidental Vocabulary Learning among EFL Le...
 
BIO Paulo Cavalcanti (english version)
BIO Paulo Cavalcanti (english version)BIO Paulo Cavalcanti (english version)
BIO Paulo Cavalcanti (english version)
 
Slovakia twinnspace
Slovakia twinnspaceSlovakia twinnspace
Slovakia twinnspace
 
Dive into apple music app
Dive into apple music appDive into apple music app
Dive into apple music app
 
Uce metodologia de la investigacion
Uce metodologia de la investigacionUce metodologia de la investigacion
Uce metodologia de la investigacion
 
Scrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачиScrum глазами тестировщика или как создать стратегию для любой задачи
Scrum глазами тестировщика или как создать стратегию для любой задачи
 
This Time It's Personal: One-on-One Canvas Support
This Time It's Personal: One-on-One Canvas SupportThis Time It's Personal: One-on-One Canvas Support
This Time It's Personal: One-on-One Canvas Support
 
Assembly lines
Assembly linesAssembly lines
Assembly lines
 
Postman tests in jenkins
Postman tests in jenkinsPostman tests in jenkins
Postman tests in jenkins
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Pl world and polish literature
Pl world and polish literaturePl world and polish literature
Pl world and polish literature
 
Konsep Asas HE
Konsep Asas HEKonsep Asas HE
Konsep Asas HE
 
meister2011.pdf
meister2011.pdfmeister2011.pdf
meister2011.pdf
 

Similar to この実装には問題がある!

Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lttorutk
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravelMasaru Matsuo
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 
Zappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるZappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるIosif Takakura
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!Naoto Ishizawa
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
Open stack swift is too Enterprise? 2014/12/01 advent cal
Open stack swift is too Enterprise?  2014/12/01 advent calOpen stack swift is too Enterprise?  2014/12/01 advent cal
Open stack swift is too Enterprise? 2014/12/01 advent calNaoto Gohko
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化COLOPL, Inc.
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたShingo Inoue
 
Introduction to guard + rspec
Introduction to guard + rspecIntroduction to guard + rspec
Introduction to guard + rspeckoko_u
 
2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料umidori
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編Kazuya Numata
 
Jpmobileを使ってみる
Jpmobileを使ってみるJpmobileを使ってみる
Jpmobileを使ってみるHiromu Shioya
 
20120616i phonedeveloperworkshop
20120616i phonedeveloperworkshop20120616i phonedeveloperworkshop
20120616i phonedeveloperworkshopYoichiro Sakurai
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までTeppei Sato
 

Similar to この実装には問題がある! (20)

Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
 
appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1
 
Zappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるZappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみる
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
Open stack swift is too Enterprise? 2014/12/01 advent cal
Open stack swift is too Enterprise?  2014/12/01 advent calOpen stack swift is too Enterprise?  2014/12/01 advent cal
Open stack swift is too Enterprise? 2014/12/01 advent cal
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
Introduction to guard + rspec
Introduction to guard + rspecIntroduction to guard + rspec
Introduction to guard + rspec
 
2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
Jpmobileを使ってみる
Jpmobileを使ってみるJpmobileを使ってみる
Jpmobileを使ってみる
 
20120616i phonedeveloperworkshop
20120616i phonedeveloperworkshop20120616i phonedeveloperworkshop
20120616i phonedeveloperworkshop
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
 

More from GOMI NINGEN

15 minutes recipe of RxSwift
15 minutes recipe of RxSwift 15 minutes recipe of RxSwift
15 minutes recipe of RxSwift GOMI NINGEN
 
Dependency Injection in Swift2
Dependency Injection in Swift2Dependency Injection in Swift2
Dependency Injection in Swift2GOMI NINGEN
 
RxSwiftを用いたアプリ開発の実践
RxSwiftを用いたアプリ開発の実践RxSwiftを用いたアプリ開発の実践
RxSwiftを用いたアプリ開発の実践GOMI NINGEN
 
ITSを用いた旅行の構築
ITSを用いた旅行の構築ITSを用いた旅行の構築
ITSを用いた旅行の構築GOMI NINGEN
 
Xamarin.iOS によるプロダクトアプリ開発の実践
Xamarin.iOS によるプロダクトアプリ開発の実践Xamarin.iOS によるプロダクトアプリ開発の実践
Xamarin.iOS によるプロダクトアプリ開発の実践GOMI NINGEN
 
RxSwiftのObservableとは何か | iOSDC Japan 2017
RxSwiftのObservableとは何か | iOSDC Japan 2017RxSwiftのObservableとは何か | iOSDC Japan 2017
RxSwiftのObservableとは何か | iOSDC Japan 2017GOMI NINGEN
 

More from GOMI NINGEN (6)

15 minutes recipe of RxSwift
15 minutes recipe of RxSwift 15 minutes recipe of RxSwift
15 minutes recipe of RxSwift
 
Dependency Injection in Swift2
Dependency Injection in Swift2Dependency Injection in Swift2
Dependency Injection in Swift2
 
RxSwiftを用いたアプリ開発の実践
RxSwiftを用いたアプリ開発の実践RxSwiftを用いたアプリ開発の実践
RxSwiftを用いたアプリ開発の実践
 
ITSを用いた旅行の構築
ITSを用いた旅行の構築ITSを用いた旅行の構築
ITSを用いた旅行の構築
 
Xamarin.iOS によるプロダクトアプリ開発の実践
Xamarin.iOS によるプロダクトアプリ開発の実践Xamarin.iOS によるプロダクトアプリ開発の実践
Xamarin.iOS によるプロダクトアプリ開発の実践
 
RxSwiftのObservableとは何か | iOSDC Japan 2017
RxSwiftのObservableとは何か | iOSDC Japan 2017RxSwiftのObservableとは何か | iOSDC Japan 2017
RxSwiftのObservableとは何か | iOSDC Japan 2017
 

この実装には問題がある!

Editor's Notes

  1. 時間がないので飛ばす
  2. 読み上げ