Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. 今のうちに知っておきたい Swiftの高速化 + 3D Touch API
  2. 2. pochikawa starfruits_j Azione Co., Ltd. Oshikawa
  3. 3. Twitterアイコン 変わりました
  4. 4. ヤラナイカ スプラトゥーンのフレンドの オンライン状態をチェックし たり通知してくれるアプリ 他 > littlegleam.com
  5. 5. 3D Touch APIs
  6. 6. • Home Screen Quick Actions • UIKit peek and pop API • Web view peek and pop API • UITouch force properties ※ Apple Developer Libraryで一般に公開されている情報に基きます 3D Touch APIs
  7. 7. 試せない。。。
  8. 8. Home Screen Quick Actions App Icon を強押しでPopOverを表示させるやつ
  9. 9. • カメラ (セルフィ、ビデオ、スロー撮影、写真撮影) • メッセージ (新規、履歴) • マップ (自宅への経路、現在地のマーク、位置情報送信、周辺検索) 使用例
  10. 10. Static quick actions UIApplicationShortcutItemsのarrayをinfo.plistに記述する
 func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void) が呼ばれるので、ごにょごにょする 起動時の場合はlaunchOptionsに UIApplicationLaunchOptionsShortcutItemKey があるので、そっちを使う。 notificationやopenURLの処理とかと同じ感じ
  11. 11. Dynamic quick actions UIApplication.shortcutItems に UIApplicationShortcutItemを登録 ログインやユーザ登録等が必要な場合はこちらを使うっぽい 4つまで登録が可能 sample code: ApplicationShortcuts: Using UIApplicationShortcutItem
  12. 12. UIKit peek and pop API 概要モードと全画面モードを担うUI
  13. 13. • 受信ボックスのEメールをPeek -> Popで普通に開く • リンクをPeek -> PopでSafari • カメラ画面でサムネイルをPeek -> Popで全画面 • 住所をPeek -> Popでマップ • 顔アイコンを3D Touchで (Facetime、メッセージ、メール等) • 左スワイプでメール削除、右スワイプで未読に? 使用例
  14. 14. • Appleの日本語ページによれば、Peekが覗く Pop で開くというニュアンス • UIViewControllerPreviewingDelegate • UIPreviewAction • UIPreviewActionGroup • UIPreviewActionItem (protocol)
  15. 15. 前準備 3D Touchの対応チェック traitCollection.forceTouchCapability == .Available 3D Touchを検出するViewを登録 registerForPreviewingWithDelegate(self, sourceView: view) 解除は unregisterForPreviewingWithContext(previewing: UIViewControllerPreviewing) ViewControllerにUIViewControllerPreviewingDelegateを実装
  16. 16. Peekさせる ViewController を返す感じ func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? Popさせる 時に呼ばれるのでshowViewControllerする感じ func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) UIViewControllerPreviewingDelegate
  17. 17. Peekを上へスワイプした時にActionSheetっぽいやつが表示される override func previewActionItems() -> [UIPreviewActionItem] で、UIPreviewActionItemのリストを返す UIPreviewActionGroup を使って複数のItemを内包させることもできる。 どうなるかは未確認。。 UIPreviewActionItem
  18. 18. Web view peek and pop API WebViewのリンクを3D Touchでポップアップする
  19. 19. WKWebView.allowsLinkPreviewをtrueにすると有効になる Pop時にはSafariじゃなくてSFSafariViewControllerが開くみたい。 JavascriptのAPIが出来れば良いのになと。 使い方
  20. 20. UITouch force properties アプリでも自由に使えます的な
  21. 21. • キーボードの3D Touchでトラックパッドに。カーソル移動に使えるらしい。 • 左端の3D Touchでマルチタスク表示 • 感圧スケッチ 使用例
  22. 22. • UITouch に force, maximumPossibleForce のプロパティが増えた • 9.1はPencil関係、ペンの角度も取れるみたいでヤバイ UITouch.force, UITouch.maximumPossibleForce
  23. 23. はやくさわりたい
  24. 24. 今のうちに知っておきたい Swiftの高速化
  25. 25. TestSplee https://github.com/jstarfruits/TestSplee
  26. 26. Swift 2 採用して数ヶ月 • だんだんコーディング規約のようなものも出来てきた • selfを使わない • セミコロンなしで統一 • 可能な限り型定義しない • クロージャは省略した書き方を優先する • Voidは省略等
  27. 27. 気楽に開発したいので、ほどほどに 例えばnilのチェック
  28. 28. とかどっちでもいい
  29. 29. とかどっちでもいい?
  30. 30. よくないんです!
  31. 31. Swiftって安全ですか? https://developer.apple.com/swift/
  32. 32. その通りと思う しかし書く人によります • 全部の変数がOptionalで、使う時は!でアンラップ? • 全部AnyObjectにされて、obj as! Stringとかされたら?
  33. 33. Swiftって速いですか? https://developer.apple.com/swift/
  34. 34. そう、きっと書く人による
  35. 35. コーディング規約の採用で迷った時の判断基準にもなるし、どんな書き方が理想なのか 使う頻度の高いパターンのベンチマークを取ってみました そう、きっと書く人による
  36. 36. 前提 これからお見せするのは 2015/09/10 iOS 9 GM Seed 発表時点、iPhone 6上で実行結果です 一部を除き1,000,000回ループさせた時にかかった時間です TestSplee
 https://github.com/jstarfruits/TestSplee
  37. 37. -------------------- 0.008 0.007 0.008 0.008 0.008 -------------------- Avg: 0.008 ====================
  38. 38. 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
  39. 39. 圧倒的 if let!!
  40. 40. strがnilじゃない場合
  41. 41. 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
  42. 42. やはり圧倒的 if let ! これだけで、あなたのコードは2倍早くなるんです!?
  43. 43. 配列に要素があるか確認 100,000件のIntを登録した配列に 要素が存在するか確認
  44. 44. 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
  45. 45. count速っ!
  46. 46. Realmでは? 100,000件のUserデータを登録した中から レコードが存在するか確認
  47. 47. 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
  48. 48. Stringは?
  49. 49. 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
  50. 50. Arrayのappend, insert 時間がかかるのでループを100,000回に変更しています
  51. 51. 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
  52. 52. Arrayの走破
  53. 53. 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
  54. 54. countの方が 10倍以上速い!
  55. 55. class vs struct 初期化コスト
  56. 56. 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
  57. 57. LOG関数問題 • デバッグ用のprint出力を、リリース時に無効にしたい • Swiftにはマクロが無いので、printは抑止できるが引数が評価されてしまう
  58. 58. Objective-Cでは無かった事にできた
  59. 59. 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まで短縮
  60. 60. Logがnilなら、実行されない 0.014 0.013 0.014 0.013 0.014 -------------------- Avg: 0.014
  61. 61. Objective-Cのメソッ ド呼び出しは遅い?
  62. 62. 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
  63. 63. まとめ • 3D Touch はやくさわりたい • 書き方次第で10倍以上スピードが上がる • 規約に悩んだらスピードで決めるのって良い • 遅いのはObjective-Cのせいじゃない • なぜ速いのか速いのか?
       中間コードを読めれば・・・
  64. 64. 注意!

×