SlideShare a Scribd company logo
1 of 36
Download to read offline
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/

More Related Content

What's hot

React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話Kanako Kobayashi
 
Server-side Swift
Server-side SwiftServer-side Swift
Server-side SwiftDaijiro Abe
 
YARAIYA! Opendata with WordPress
YARAIYA!  Opendata with WordPressYARAIYA!  Opendata with WordPress
YARAIYA! Opendata with WordPressHidetaka Okamoto
 
20150926 uwpストア攻略
20150926 uwpストア攻略20150926 uwpストア攻略
20150926 uwpストア攻略Makoto Nishimura
 
How Would You Like Component Management System
How Would You Like Component Management SystemHow Would You Like Component Management System
How Would You Like Component Management SystemHidetaka Okamoto
 
Laravel Meetup Tokyo Vol.3 告知 LT
Laravel Meetup Tokyo Vol.3 告知 LTLaravel Meetup Tokyo Vol.3 告知 LT
Laravel Meetup Tokyo Vol.3 告知 LTKenichi Mukai
 
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)Makoto Nishimura
 
MyBatis を利用した web application 開発についてのご紹介
MyBatis を利用した web application 開発についてのご紹介  MyBatis を利用した web application 開発についてのご紹介
MyBatis を利用した web application 開発についてのご紹介 Tokuhiro Matsuno
 
Uno Platform 触ってみた
Uno Platform 触ってみたUno Platform 触ってみた
Uno Platform 触ってみた一希 大田
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)Study Group by SciencePark Corp.
 
WordCamp Tokyo 2014
WordCamp Tokyo 2014WordCamp Tokyo 2014
WordCamp Tokyo 2014horike37
 
ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"Narami Kiyokura
 
Mobingi ALM Hands-on 20170718
Mobingi ALM Hands-on 20170718Mobingi ALM Hands-on 20170718
Mobingi ALM Hands-on 20170718Masafumi Noguchi
 
Web開発の 今までとこれから
Web開発の 今までとこれからWeb開発の 今までとこれから
Web開発の 今までとこれからShinichi Takahashi
 
アプリ開発&チーム管理で 役立った拡張機能
アプリ開発&チーム管理で役立った拡張機能アプリ開発&チーム管理で役立った拡張機能
アプリ開発&チーム管理で 役立った拡張機能Masaki Suzuki
 
第52回 WordBench 大阪 WordPress の新しい翻訳システム「GlotPress」を使ってみよう!
第52回 WordBench 大阪   WordPress の新しい翻訳システム「GlotPress」を使ってみよう! 第52回 WordBench 大阪   WordPress の新しい翻訳システム「GlotPress」を使ってみよう!
第52回 WordBench 大阪 WordPress の新しい翻訳システム「GlotPress」を使ってみよう! Kitani Kimiya
 
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
Visual Studio 2015 リリース記念 勉強会 universal windows platform appVisual Studio 2015 リリース記念 勉強会 universal windows platform app
Visual Studio 2015 リリース記念 勉強会 universal windows platform app一希 大田
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Kanako Kobayashi
 

What's hot (20)

React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話
 
Server-side Swift
Server-side SwiftServer-side Swift
Server-side Swift
 
YARAIYA! Opendata with WordPress
YARAIYA!  Opendata with WordPressYARAIYA!  Opendata with WordPress
YARAIYA! Opendata with WordPress
 
20150926 uwpストア攻略
20150926 uwpストア攻略20150926 uwpストア攻略
20150926 uwpストア攻略
 
Riot.jsに触れてみた話
Riot.jsに触れてみた話Riot.jsに触れてみた話
Riot.jsに触れてみた話
 
How Would You Like Component Management System
How Would You Like Component Management SystemHow Would You Like Component Management System
How Would You Like Component Management System
 
Laravel Meetup Tokyo Vol.3 告知 LT
Laravel Meetup Tokyo Vol.3 告知 LTLaravel Meetup Tokyo Vol.3 告知 LT
Laravel Meetup Tokyo Vol.3 告知 LT
 
Editorlt
EditorltEditorlt
Editorlt
 
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
 
MyBatis を利用した web application 開発についてのご紹介
MyBatis を利用した web application 開発についてのご紹介  MyBatis を利用した web application 開発についてのご紹介
MyBatis を利用した web application 開発についてのご紹介
 
Uno Platform 触ってみた
Uno Platform 触ってみたUno Platform 触ってみた
Uno Platform 触ってみた
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
 
WordCamp Tokyo 2014
WordCamp Tokyo 2014WordCamp Tokyo 2014
WordCamp Tokyo 2014
 
ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"ASP.NET "NOW" and "NEXT"
ASP.NET "NOW" and "NEXT"
 
Mobingi ALM Hands-on 20170718
Mobingi ALM Hands-on 20170718Mobingi ALM Hands-on 20170718
Mobingi ALM Hands-on 20170718
 
Web開発の 今までとこれから
Web開発の 今までとこれからWeb開発の 今までとこれから
Web開発の 今までとこれから
 
アプリ開発&チーム管理で 役立った拡張機能
アプリ開発&チーム管理で役立った拡張機能アプリ開発&チーム管理で役立った拡張機能
アプリ開発&チーム管理で 役立った拡張機能
 
第52回 WordBench 大阪 WordPress の新しい翻訳システム「GlotPress」を使ってみよう!
第52回 WordBench 大阪   WordPress の新しい翻訳システム「GlotPress」を使ってみよう! 第52回 WordBench 大阪   WordPress の新しい翻訳システム「GlotPress」を使ってみよう!
第52回 WordBench 大阪 WordPress の新しい翻訳システム「GlotPress」を使ってみよう!
 
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
Visual Studio 2015 リリース記念 勉強会 universal windows platform appVisual Studio 2015 リリース記念 勉強会 universal windows platform app
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
 

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

Swift5_1 swift_ui
Swift5_1 swift_uiSwift5_1 swift_ui
Swift5_1 swift_uiRyoyaIto
 
チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版Ikada Kaori
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略GuildWorks
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークMaehana Tsuyoshi
 
Fun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swaggerFun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swaggerAnzaiKumiko
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話Yoichiro Sakurai
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化NIFTY Cloud
 
Swiftを迷わず選んだ理由
Swiftを迷わず選んだ理由Swiftを迷わず選んだ理由
Swiftを迷わず選んだ理由zuckerburg
 
IoTで5days学生インターン
IoTで5days学生インターンIoTで5days学生インターン
IoTで5days学生インターンKazuya Fukumoto
 
Soft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントSoft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントShuichi Yukimoto
 
こだわりのkintone
こだわりのkintoneこだわりのkintone
こだわりのkintoneYusuke Amano
 
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回Kanako Kobayashi
 
クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発Yuuji Arakaki
 
SwiftによるiOS開発再入門
SwiftによるiOS開発再入門SwiftによるiOS開発再入門
SwiftによるiOS開発再入門Tomoki Hasegawa
 
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいQt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいYou&I
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方kaiba d
 

Similar to Promise in Swift by PromiseKit - Swift勉強会 2015/05/25 (20)

Swift5_1 swift_ui
Swift5_1 swift_uiSwift5_1 swift_ui
Swift5_1 swift_ui
 
チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
 
Fun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swaggerFun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swagger
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
 
Swiftを迷わず選んだ理由
Swiftを迷わず選んだ理由Swiftを迷わず選んだ理由
Swiftを迷わず選んだ理由
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
IoTで5days学生インターン
IoTで5days学生インターンIoTで5days学生インターン
IoTで5days学生インターン
 
Soft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントSoft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイント
 
こだわりのkintone
こだわりのkintoneこだわりのkintone
こだわりのkintone
 
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回
超簡単!? ActiveAdminで作る管理画面@Ruby / Ruby on Rails ビギナーズ勉強会 第3回
 
クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発
 
SwiftによるiOS開発再入門
SwiftによるiOS開発再入門SwiftによるiOS開発再入門
SwiftによるiOS開発再入門
 
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいQt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方
 

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