狠狠撸

狠狠撸Share a Scribd company logo
Promise in Swift
by PromiseKit
Swift 勉強会 2015/05/25
Yuta Shimizu
自己紹介
? 清水 雄太 twitter: @pachirel
? クックパッドで新規サービス開発担当
? 初めての新規サービス開発を通して学んでいること
? 半年前にSwiftはじめました
Swift勉強会初参加
? どんなモヒカンがいらっしゃっているのかと
dkdkしてます
Swift 書いてますかー?
Swift 楽しいですね
今日は笔谤辞尘颈蝉别
なぜPromise使うのか
? コールバックつらい
? 例外処理つらい
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
作っていたアプリ
? バックエンドがいわゆる普通のRESTクライアン
ト
? 画面単位のAPIがないので、1画面毎に複数の
リクエストを生成する必要がある
? リクエストの管理が烦雑
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
PromiseKit導入の理由
? objcの他プロジェクトで導入実績があった
? 2014/10当時、swift版がリリースされていた
? 開発が(主に一人だけど)アクティブ
? 最近ではSwiftTaskが良さそうと聞く
Promiseの簡単な説明
? javascriptのPromise/A+がベース
? then, catch, ?nally
? pending, ful?lled, rejected
? ライブラリによって機能が異なる
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
PromiseKitの追加機能
? あまり多くない
? when
? 複数のPromiseの並列実行
? after
? 一定時間後にPromiseを実行
? Promise(on: thread), zalgo, walgo
? 実行するThreadを変更できる
? ちゃんと理解して使わないと危ない(使ってません)
実際に導入してみて
? コードの見通しが良くなった
? エラー処理がすっきり書ける
? when等は使わず、then, catch ?nallyで事足りた
PromiseKitのはまりどころ
? 構文エラー回避に慣れが必要
? クロージャの型は省略しないのがオススメ
? catchし忘れても気づかない
? catch忘れのログは出るが、見落としがち
? thenを書いたら絶対catch!
PromiseKit 2.0が最近リリース
? 本体コードがswiftに移行
? recover
? cancellation
? Obj-c <=> Swift 対応(AnyPromise)
Recover
? エラーを処理したあと、次のchainに繋ぐ
Cancellation
AnyPromise
? Objective-cとの互換性
? 1.x時代に実装された各種ライブラリに対応した
obj-cカテゴリが使える。
実装が気になる
読んでみた
実装を読んで得た知见
@noescape
? Swift 1.2で追加されたattribute
? ブロックを引数に取る関数を定義するときにつけると、
使用時にクロージャ内でself.が省略できる
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Optional + Enum + Switch
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
DebugPrintable protocol
_ + デフォルト引数
? Swiftだとそ最後の引数のブロックの名前を省略
できるけれど、親切っぽい
関心事で别虫迟别苍蝉颈辞苍に分ける
まとめ
? PromiseKit使ってSwiftでPromiseライフ
? PromiseKit 2.0はコンパクトな実装
? OSS実装を読むと学びが大きい/?
(書けばもっと??)
ご清聴ありがとう
ございました
出展
? http://promisekit.org/introduction/
? http://promisekit.org/PromiseKit-2.0-Released/

More Related Content

Promise in Swift by PromiseKit - Swift勉強会 2015/05/25