Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

先日Appleから発表された3D TouchのAPIについてと、Swiftの高速化について

  • Be the first to comment

今のうちに知っておきたい 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. 注意!

    Be the first to comment

    Login to see the comments

  • takashings

    Sep. 28, 2015
  • satsv

    Sep. 29, 2015
  • KenTominaga

    Sep. 29, 2015
  • ShoheiOhno

    Sep. 30, 2015
  • roworks

    Oct. 25, 2015
  • roworks

    Oct. 25, 2015
  • shunnakahara

    Nov. 4, 2015
  • koichirooishi

    Nov. 5, 2015
  • yutakatajika

    Dec. 14, 2015
  • FumiyaYamanaka

    Dec. 14, 2015
  • xlf01512

    Dec. 15, 2015
  • KentaroHiguchi43153

    Dec. 21, 2015
  • satosuyama

    Dec. 21, 2015
  • akioyoshi

    Dec. 22, 2015
  • risingore

    Jan. 17, 2016
  • the-hideo54

    Jan. 18, 2016
  • ssuser79c1c1

    Mar. 2, 2016
  • HiroakiKomatsu

    Mar. 24, 2016
  • KoichiKaneda1

    Jan. 13, 2018
  • KodaiOzawa1

    Jan. 26, 2018

先日Appleから発表された3D TouchのAPIについてと、Swiftの高速化について

Views

Total views

5,776

On Slideshare

0

From embeds

0

Number of embeds

564

Actions

Downloads

15

Shares

0

Comments

0

Likes

28

×