Swift5_Cheet_Sheet.pdf

Beef2647567dd5b666fee8c97b0aee3e?s=47 Kohei Arai
May 10, 2019
740

 Swift5_Cheet_Sheet.pdf

Beef2647567dd5b666fee8c97b0aee3e?s=128

Kohei Arai

May 10, 2019
Tweet

Transcript

  1. Swift 5.0 Cheat Sheet Kohei Arai @kokoheia 10 minutes catch

    up
  2. Kohei Arai @kokoheia 自己紹介 • Mercari / 新卒 iOS Engineer

    • Twitter: @kokoheia • Instagram: @koatiarai • 趣味: ポートレート撮ってます • 最近はARKitと戯れたいと思っています
  3. Swift5.0 キャッチアップしなくちゃ。。 でも時間ない。。 Swift 5.0 Cheet Sheet - Kohei Arai

    @kokoheia
  4. そんなあなたのために Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

  5. 10分で読めるチートシート作りました Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

  6. 1. 全体的なアップデート ABI Stability 3. 言語仕様 / コンパイラの アップデート 17.

    Enumへの@unknownの追加 18. リテラルを使った強制init 19. Dynamically callable 20. compilation conditionsの 未満オプション 21. Identity keypath 22. try?のオプショナル構造の簡 略化 2. 標準ライブラリのアップデート 1. Stringの特殊文字 2. Unicode Property 3. 型名の変更 4. Never型のプロトコル準拠 5. ContactValueMapの追加 6. Character Propertiesの追加 7. isMultipleの追加 8. 文字列補間のカスタマイズ 9. SIMD Vectorsの追加 10. カスタマイゼーションポイントの除外 11. Numericプロトコルの修正 12. Sequence.SubSequenceの消去 13. Result型の追加 14. withContiguous{Mutable}StorageIf Availableの追加 15. RangeのCodableへの準拠 16. StringのencodedOffsetの廃止 Table of Contents Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  7. 1. 全体的なアップデート Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

  8. ABI Stability コア概念 • Swiftのバイナリの互換性を確保 • アプリ本体に対して、使用するLibraryやFrameworkの Swiftのバージョンが異なっても、動作させることがで きるようになる *

    ABI = Application Binary Interface
  9. 2. 標準ライブラリの アップデート Swift 5.0 Cheet Sheet - Kohei Arai

    @kokoheia
  10. 1 Stringの 特殊文字 要約 • Stringの中で "" や \などの特殊文字 を扱う方法が簡単になった

    • 特殊文字の前に \ をつける代わりに全体を # でくくる方式になっ た メリット • 主に正規表現などを効率的に書きやすくなった Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  11. 要約 • Unicode.Scalar.Propertiesという複数のプロパティが追加された メリット • Unicode.Scalarの中身を確かめやすくなった。 (大文字? 小文字? 絵文字?など) 2

    Unicode プロパティ の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  12. 要約 • DictionayLiteral型がKeyValuePairs型という名前に変わった メリット • こちらの方が名前が正確に役割を表している 3 型名の変更 DictionaryLiteral ↓

    KeyValuePairs Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0214-DictionaryLiteral.mdより
  13. 要約 • Never型がEquatableとHashable型に準拠した。 メリット • Generics、enum、collection等の中でNeverを使えるようになった。 • 現在はfatalError関数の返り値などでしか見かけないが、もう少し柔軟 に使うことができそう 4

    Never型の プロトコル 準拠 Equatable Hashable Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0215-conform-never-to-hashable-and-equatable.mdより
  14. 要約 • dictionary型のvalueに対してcompactMapValueを使えるよう になった • 配列に対するcompactMapみたいなもの メリット • dictionaryの値に対して適合しない型や、 nilを除外したdictionaryを作るこ

    とができる。 5 Contact ValueMap の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  15. 要約 • Characterの中身を確かめるプロパティが追加された メリット • Characterの中身が簡単に確かめられるようになった 6 Character Properties の追加

    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  16. 要約 • Intが何の倍数か教えてくれる メリット • %を使うよりも可読性が向上した • IDEがAuto fillしてくれるのでタイピングが楽 •

    小さい単位で再利用が可能 • %を使った計算で間違うリスクが減る • パフォーマンスの向上 7 isMultiple の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  17. 要約 • 文字列補間をカスタマイズできるようになった メリット • クラスのインスタンスプロパティをデバッガなどに表示できる。 • URLやメアドなどの文字列補間がよりシンプルにかけるようになった 8 文字列補間の

    カスタマイズ Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0参考に実装
  18. 要約 • SIMDVectorsというクラスが追加された メリット • SwiftでSIMDプログラミングしやすくなった • SIMD = 1つの命令形で複数のデータを処理する並列化の一種

    *SIMD = Single Instruction, Multiple Data 9 SIMD Vectors の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0229-simd.mdより
  19. 要約 • Sequence, Collection, BidirectionalCollectionにおける下記の Customization Pointsが除外されたので、カスタム実装ができなく なった *Customization Points

    = protocolで宣言されているmethod メリット • 前提として、カスタマイゼーションポイントはコンパイルのコストが かかる。 • ABIスタビリティを実現する時に、カスタマイゼーションポイントはこ れからremoveできないが、新たにaddすることはできる。 • 従って、一旦removeして本当に必要な時にだけaddして使うという設 計 10 Customization Points の除外 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0232-remove-customization-points.mdより
  20. 要約 • Numericプロトコルが数学的に間違っていたので、AdditiveArithmetic プロトコルを新たに追加して修正した。 メリット • Numericプロトコルの数学的な間違いを修正した • Shapeが定義されていなくても、スカラーから動的なベクトルへの変換がで きるようになった

    • 乗算などの演算子を使う際の型の曖昧さを取り除いた 11 Numeric プロトコル の修正 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0233-additive-arithmetic-protocol.mdより
  21. 要約 • SubSequence型を消去し、対象の関数の返り値をDropFirstSequence, DropWhileSequence, [Element]などより具体的な型を返すように変更し た メリット • それぞれの関数の処理に適切な型に変換することでパフォーマンスが向上 した

    • Sequence → CollectionのConditional Conformanceを可能にした 12 Sequence. SubSequence の消去 → Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0234-remove-sequence-subsequence.mdより
  22. 要約 • 標準ライブラリでResult型が使えるようになった メリット • throw以外の方法でエラーハンドリングできるようになり、 非同期処理や Observableなどと組み合わせて使いやすくなった 13 Result型

    の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0を参考に実装
  23. 要約 • Sequence型にwithContiguous{Mutable}StorageIfAvailable関数が追加 された メリット • withUnsafeBufferPointerとwithUnsafeMutableBufferPointerに対しても ジェネリカルに書くことができ、表現力を増した 14 with

    Contiguous {Mutable} Storage IfAvailable の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0237-contiguous-collection.mdより
  24. 要約 • Rangeやそれに関連する型をCodableプロトコルに準拠させた メリット • DateやMeasurement<UnitTemperature>などを使ってRangeを区切っ てクライアント / サーバー間で通信をすることができて便利になった 15

    Rangeの Codable への準拠 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0239-codable-range.mdより
  25. 要約 • Swift4.0で追加されたString.IndexのencodedOffsetを一旦廃止して別 の実装に差し替えた 経緯 • Swift5.0への差し替えの段階でバグが発生し、根本の解決はリリース に間に合わなかったので別の実装に変えた 16 Stringの

    encodedOffset の廃止 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0241-string-index-explicit-encoding-offset.mdより
  26. 3. 言語仕様 / コンパイラの アップデート Swift 5.0 Cheet Sheet -

    Kohei Arai @kokoheia
  27. 要約 • enumのdefaultに@unknown詞をつけられるようになった • @unknown詞をつけるとsystemがwarningを出してくれる メリット • 新しいenumのcaseを追加されうるときに使うことで、処理の抜け漏れ を防ぐことができる。 17

    Enumへの @unknown の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
  28. 要約 • T(Literal)を使ってinitする時に強制的に変換してくれる メリット • 今まではうまく変換されていなかったものにも変換されるようになっ た • 型のチェックを効率的にして一部のロジックではパフォーマンスの向 上に繋がっている

    18 リテラルを 使った 強制init Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia 一部https://medium.com/@d_date/whats-new-in-swift-5-70225f063b87を参考に実装
  29. 要約 • Swiftをpythonやjava scriptのように動的に呼び出せるようになる。 @dynamicMemberLookupを拡張したもの。 メリット • Pythonを使った機械学習など、動的ライブラリと連携する際に有用そ う 19

    Dynamically callable の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0216-dynamic-callable.mdより
  30. 要約 • Compilation Conditionでless than (未満)が使えるようになった メリット • コードの可読性が上がった 20

    compilation conditions の「未満」 オプション ↓ Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0224-ifswift-lessthan-operator.mdより
  31. 要約 • 型自身(\.self)のkeypathが取得できるようになった メリット • keypathを通じて型の全ての値を参照できるようになった • 例えば、observerと組み合わせることによって、型の全ての値を用い てstateの更新をすることができる 21

    Identity keypath の追加 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://github.com/apple/swift-evolution/blob/master/proposals/0227-identity-keypath.mdより
  32. 要約 • try?から取得されるoptionalの階層がnestされないようになった メリット • optional unwrappingの必要な回数が減るので、コードもシンプルにな る。 22 try?の

    オプショナ ル構造の 簡略化 Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0よりコード引用
  33. Swift5.0 キャッチアップ完了! Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

  34. ご静聴ありがとうございました Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

  35. 参考 • https://swift.org/blog/swift-5-released/ • https://swift.org/blog/abi-stability-and-more/ • https://www.hackingwithswift.com/articles/126/ whats-new-in-swift-5-0 • https://medium.com/@d_date/whats-new-in-swift-

    5-70225f063b87 • https://qiita.com/koher/items/7e92414082476fb87b76