promise in swift by promisekit - swift勉強会 2015/05/25

36
Promise in Swift by PromiseKit Swift 勉強会 2015/05/25 Yuta Shimizu

Upload: yuta-shimizu

Post on 11-Aug-2015

197 views

Category:

Technology


4 download

TRANSCRIPT

Promise in Swift by PromiseKit

Swift 勉強会 2015/05/25 Yuta Shimizu

自己紹介

• 清水 雄太 twitter: @pachirel

• クックパッドで新規サービス開発担当

• 初めての新規サービス開発を通して学んでいること

• 半年前にSwiftはじめました

Swift勉強会初参加

• どんなモヒカンがいらっしゃっているのかとdkdkしてます

Swift 書いてますかー?

Swift 楽しいですね

今日はPromise

なぜPromise使うのか

• コールバックつらい

• 例外処理つらい

作っていたアプリ

• バックエンドがいわゆる普通のRESTクライアント

• 画面単位のAPIがないので、1画面毎に複数のリクエストを生成する必要がある

• リクエストの管理が煩雑

PromiseKit導入の理由

• objcの他プロジェクトで導入実績があった

• 2014/10当時、swift版がリリースされていた

• 開発が(主に一人だけど)アクティブ

• 最近ではSwiftTaskが良さそうと聞く

Promiseの簡単な説明

• javascriptのPromise/A+がベース

• then, catch, finally

• pending, fulfilled, rejected

• ライブラリによって機能が異なる

PromiseKitの追加機能• あまり多くない

• when

• 複数のPromiseの並列実行

• after

• 一定時間後にPromiseを実行

• Promise(on: thread), zalgo, walgo

• 実行するThreadを変更できる

• ちゃんと理解して使わないと危ない(使ってません)

実際に導入してみて

• コードの見通しが良くなった

• エラー処理がすっきり書ける

• when等は使わず、then, catch finallyで事足りた

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.が省略できる

Optional + Enum + Switch

DebugPrintable protocol

_ + デフォルト引数

• Swiftだとそ最後の引数のブロックの名前を省略できるけれど、親切っぽい

関心事でextensionに分ける

まとめ

• PromiseKit使ってSwiftでPromiseライフ

• PromiseKit 2.0はコンパクトな実装

• OSS実装を読むと学びが大きい/(書けばもっと・・)

ご清聴ありがとう ございました

出展

• http://promisekit.org/introduction/

• http://promisekit.org/PromiseKit-2.0-Released/