SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
今のうちに知っておきたい
Swiftの高速化
+ 3D Touch API
pochikawa
starfruits_j
Azione Co., Ltd.
Oshikawa
Twitterアイコン
変わりました
ヤラナイカ
スプラトゥーンのフレンドの
オンライン状態をチェックし
たり通知してくれるアプリ
他 > littlegleam.com
3D Touch APIs
• Home Screen Quick Actions
• UIKit peek and pop API
• Web view peek and pop API
• UITouch force properties
※ Apple Developer Libraryで一般に公開されている情報に基きます
3D Touch APIs
試せない。。。
Home Screen Quick Actions
App Icon を強押しでPopOverを表示させるやつ
• カメラ (セルフィ、ビデオ、スロー撮影、写真撮影)
• メッセージ (新規、履歴)
• マップ (自宅への経路、現在地のマーク、位置情報送信、周辺検索)
使用例
Static quick actions
UIApplicationShortcutItemsのarrayをinfo.plistに記述する

func application(application: UIApplication,
performActionForShortcutItem shortcutItem: UIApplicationShortcutItem,
completionHandler: Bool -> Void)
が呼ばれるので、ごにょごにょする
起動時の場合はlaunchOptionsに
UIApplicationLaunchOptionsShortcutItemKey があるので、そっちを使う。
notificationやopenURLの処理とかと同じ感じ
Dynamic quick actions
UIApplication.shortcutItems に UIApplicationShortcutItemを登録
ログインやユーザ登録等が必要な場合はこちらを使うっぽい
4つまで登録が可能
sample code: ApplicationShortcuts: Using UIApplicationShortcutItem
UIKit peek and pop API
概要モードと全画面モードを担うUI
• 受信ボックスのEメールをPeek -> Popで普通に開く
• リンクをPeek -> PopでSafari
• カメラ画面でサムネイルをPeek -> Popで全画面
• 住所をPeek -> Popでマップ
• 顔アイコンを3D Touchで (Facetime、メッセージ、メール等)
• 左スワイプでメール削除、右スワイプで未読に?
使用例
• Appleの日本語ページによれば、Peekが覗く Pop で開くというニュアンス
• UIViewControllerPreviewingDelegate
• UIPreviewAction
• UIPreviewActionGroup
• UIPreviewActionItem (protocol)
前準備
3D Touchの対応チェック
traitCollection.forceTouchCapability == .Available
3D Touchを検出するViewを登録
registerForPreviewingWithDelegate(self, sourceView: view)
解除は
unregisterForPreviewingWithContext(previewing:
UIViewControllerPreviewing)
ViewControllerにUIViewControllerPreviewingDelegateを実装
Peekさせる ViewController を返す感じ
func previewingContext(previewingContext:
UIViewControllerPreviewing, viewControllerForLocation
location: CGPoint) -> UIViewController?
Popさせる 時に呼ばれるのでshowViewControllerする感じ
func previewingContext(previewingContext:
UIViewControllerPreviewing, commitViewController
viewControllerToCommit: UIViewController)
UIViewControllerPreviewingDelegate
Peekを上へスワイプした時にActionSheetっぽいやつが表示される
override func previewActionItems() -> [UIPreviewActionItem]
で、UIPreviewActionItemのリストを返す
UIPreviewActionGroup を使って複数のItemを内包させることもできる。
どうなるかは未確認。。
UIPreviewActionItem
Web view peek and pop API
WebViewのリンクを3D Touchでポップアップする
WKWebView.allowsLinkPreviewをtrueにすると有効になる
Pop時にはSafariじゃなくてSFSafariViewControllerが開くみたい。
JavascriptのAPIが出来れば良いのになと。
使い方
UITouch force properties
アプリでも自由に使えます的な
• キーボードの3D Touchでトラックパッドに。カーソル移動に使えるらしい。
• 左端の3D Touchでマルチタスク表示
• 感圧スケッチ
使用例
• UITouch に force, maximumPossibleForce のプロパティが増えた
• 9.1はPencil関係、ペンの角度も取れるみたいでヤバイ
UITouch.force,
UITouch.maximumPossibleForce
はやくさわりたい
今のうちに知っておきたい
Swiftの高速化
TestSplee
https://github.com/jstarfruits/TestSplee
Swift 2 採用して数ヶ月
• だんだんコーディング規約のようなものも出来てきた
• selfを使わない
• セミコロンなしで統一
• 可能な限り型定義しない
• クロージャは省略した書き方を優先する
• Voidは省略等
気楽に開発したいので、ほどほどに
例えばnilのチェック
とかどっちでもいい
とかどっちでもいい?
よくないんです!
Swiftって安全ですか?
https://developer.apple.com/swift/
その通りと思う
しかし書く人によります
• 全部の変数がOptionalで、使う時は!でアンラップ?
• 全部AnyObjectにされて、obj as! Stringとかされたら?
Swiftって速いですか?
https://developer.apple.com/swift/
そう、きっと書く人による
コーディング規約の採用で迷った時の判断基準にもなるし、どんな書き方が理想なのか
使う頻度の高いパターンのベンチマークを取ってみました
そう、きっと書く人による
前提
これからお見せするのは 2015/09/10 iOS 9 GM Seed 発表時点、iPhone 6上で実行結果です
一部を除き1,000,000回ループさせた時にかかった時間です
TestSplee

https://github.com/jstarfruits/TestSplee
--------------------
0.008
0.007
0.008
0.008
0.008
--------------------
Avg: 0.008
====================
VS
0.021
0.020
0.020
0.021
0.021
--------------------
Avg: 0.021
0.377
0.374
0.373
0.372
0.374
--------------------
Avg: 0.374
圧倒的 if let!!
strがnilじゃない場合
VS
0.234
0.231
0.233
0.233
0.234
--------------------
Avg: 0.233
0.568
0.572
0.572
0.573
0.569
--------------------
Avg: 0.571
やはり圧倒的 if let !
これだけで、あなたのコードは2倍早くなるんです!?
配列に要素があるか確認
100,000件のIntを登録した配列に
要素が存在するか確認
0.836
0.832
0.835
0.830
0.831
--------------------
Avg: 0.833
0.089
0.090
0.090
0.089
0.089
--------------------
Avg: 0.090
0.343
0.343
0.342
0.343
0.342
--------------------
Avg: 0.343
count速っ!
Realmでは?
100,000件のUserデータを登録した中から
レコードが存在するか確認
VS
0.446
0.446
0.450
0.448
0.443
--------------------
Avg: 0.447
0.211
0.210
0.212
0.211
0.212
--------------------
Avg: 0.211
Stringは?
0.630
0.624
0.625
0.624
0.625
--------------------
Avg: 0.626
0.229
0.227
0.229
0.227
0.228
--------------------
Avg: 0.228
0.227
0.227
0.228
0.226
0.227
--------------------
Avg: 0.227
Arrayのappend,
insert
時間がかかるのでループを100,000回に変更しています
0.059
0.060
0.059
0.060
0.059
--------------------
Avg: 0.059
0.167
0.168
0.169
0.167
0.169
--------------------
Avg: 0.168
6.690
6.751
6.810
6.784
6.755
--------------------
Avg: 6.758
Arrayの走破
0.542
0.537
0.537
0.539
0.538
--------------------
Avg: 0.538
0.043
0.044
0.044
0.042
0.042
--------------------
Avg: 0.043
0.746
0.744
0.755
0.747
0.745
--------------------
Avg: 0.747
countの方が
10倍以上速い!
class vs struct
初期化コスト
0.286
0.280
0.294
0.288
0.285
--------------------
Avg: 0.286
0.009
0.009
0.009
0.009
0.009
--------------------
Avg: 0.009
LOG関数問題
• デバッグ用のprint出力を、リリース時に無効にしたい
• Swiftにはマクロが無いので、printは抑止できるが引数が評価されてしまう
Objective-Cでは無かった事にできた
2.941
2.662
2.635
2.646
2.635
--------------------
Avg: 2.704
0.199
0.199
0.197
0.210
0.200
--------------------
Avg: 0.201
引数が1つなら0.026まで短縮
Logがnilなら、実行されない
0.014
0.013
0.014
0.013
0.014
--------------------
Avg: 0.014
Objective-Cのメソッ
ド呼び出しは遅い?
0.092
0.092
0.092
0.094
0.092
--------------------
Avg: 0.092
0.107
0.106
0.106
0.107
0.107
--------------------
Avg: 0.107
まとめ
• 3D Touch はやくさわりたい
• 書き方次第で10倍以上スピードが上がる
• 規約に悩んだらスピードで決めるのって良い
• 遅いのはObjective-Cのせいじゃない
• なぜ速いのか速いのか?

      中間コードを読めれば・・・
注意!

Contenu connexe

En vedette

Adobe Illustrator はじめてのスクリプト
Adobe Illustrator はじめてのスクリプトAdobe Illustrator はじめてのスクリプト
Adobe Illustrator はじめてのスクリプトnaichilab
 
Xcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドXcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドnnkgw
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリングleverages_event
 
脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけDaiki Mogmet Ito
 
AWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリAWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリTakayuki Miyauchi
 
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」Kanako Kobayashi
 
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すためにモバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すためにKeisuke Tada
 

En vedette (7)

Adobe Illustrator はじめてのスクリプト
Adobe Illustrator はじめてのスクリプトAdobe Illustrator はじめてのスクリプト
Adobe Illustrator はじめてのスクリプト
 
Xcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドXcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルド
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
 
脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ
 
AWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリAWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリ
 
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
 
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すためにモバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
モバイルアプリのインタラクションプロトタイピング - 高速に仮説・実行・検証サイクルを回すために
 

Similaire à 今のうちに知っておきたい Swiftの高速化 + 3D Touch API

Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)Yoshiki Ushida
 
kintone を 農業 IoT に活用! 「API で農業をつなぐ」
kintone を 農業 IoT に活用!「API で農業をつなぐ」kintone を 農業 IoT に活用!「API で農業をつなぐ」
kintone を 農業 IoT に活用! 「API で農業をつなぐ」Yukihito Kataoka
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜Kosuke Ogawa
 
20150930 3D Touchを試す
20150930 3D Touchを試す20150930 3D Touchを試す
20150930 3D Touchを試すKei Ito
 
ASP.net MVC で Stripe 課金を実装してみた話
ASP.net MVC で Stripe課金を実装してみた話ASP.net MVC で Stripe課金を実装してみた話
ASP.net MVC で Stripe 課金を実装してみた話Yukihito Kataoka
 
アイコンメモを支えるWeb技術
アイコンメモを支えるWeb技術アイコンメモを支えるWeb技術
アイコンメモを支えるWeb技術Makoto Setoh
 
20151130 Apple Pencilを使う
20151130 Apple Pencilを使う20151130 Apple Pencilを使う
20151130 Apple Pencilを使うKei Ito
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with HandoffYuichi Yoshida
 
片岡Io tltシリーズネタ 2016/10/29
片岡Io tltシリーズネタ 2016/10/29片岡Io tltシリーズネタ 2016/10/29
片岡Io tltシリーズネタ 2016/10/29Yukihito Kataoka
 
Einsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようEinsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようSalesforce Developers Japan
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すTomoki Hasegawa
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみたShingo Tamaki
 
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜Yuka Tokuyama
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaAkira Iwaya
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできることTomoaki Imai
 

Similaire à 今のうちに知っておきたい Swiftの高速化 + 3D Touch API (20)

Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
 
kintone を 農業 IoT に活用! 「API で農業をつなぐ」
kintone を 農業 IoT に活用!「API で農業をつなぐ」kintone を 農業 IoT に活用!「API で農業をつなぐ」
kintone を 農業 IoT に活用! 「API で農業をつなぐ」
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
 
Leap motion.js
Leap motion.jsLeap motion.js
Leap motion.js
 
20150930 3D Touchを試す
20150930 3D Touchを試す20150930 3D Touchを試す
20150930 3D Touchを試す
 
ASP.net MVC で Stripe 課金を実装してみた話
ASP.net MVC で Stripe課金を実装してみた話ASP.net MVC で Stripe課金を実装してみた話
ASP.net MVC で Stripe 課金を実装してみた話
 
アイコンメモを支えるWeb技術
アイコンメモを支えるWeb技術アイコンメモを支えるWeb技術
アイコンメモを支えるWeb技術
 
20151130 Apple Pencilを使う
20151130 Apple Pencilを使う20151130 Apple Pencilを使う
20151130 Apple Pencilを使う
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with Handoff
 
片岡Io tltシリーズネタ 2016/10/29
片岡Io tltシリーズネタ 2016/10/29片岡Io tltシリーズネタ 2016/10/29
片岡Io tltシリーズネタ 2016/10/29
 
Linebotを作ろう
Linebotを作ろうLinebotを作ろう
Linebotを作ろう
 
Einsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようEinsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみよう
 
Tmcn Leap Motion
Tmcn Leap MotionTmcn Leap Motion
Tmcn Leap Motion
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみた
 
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwaya
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
 

今のうちに知っておきたい Swiftの高速化 + 3D Touch API