$30 off During Our Annual Pro Sale. View Details »

Swift5_Cheet_Sheet.pdf

Kohei Arai
May 10, 2019
1.1k

 Swift5_Cheet_Sheet.pdf

Kohei Arai

May 10, 2019
Tweet

Transcript

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

    View Slide

  2. Kohei Arai
    @kokoheia
    自己紹介
    ● Mercari / 新卒 iOS Engineer
    ● Twitter: @kokoheia
    ● Instagram: @koatiarai
    ● 趣味: ポートレート撮ってます
    ● 最近はARKitと戯れたいと思っています

    View Slide

  3. Swift5.0
    キャッチアップしなくちゃ。。
    でも時間ない。。
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  7. 1. 全体的なアップデート
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

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

    View Slide

  9. 2. 標準ライブラリの
    アップデート
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

  10. 1
    Stringの
    特殊文字
    要約
    ● Stringの中で "" や \などの特殊文字 を扱う方法が簡単になった
    ● 特殊文字の前に \ をつける代わりに全体を # でくくる方式になっ

    メリット
    ● 主に正規表現などを効率的に書きやすくなった
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

  11. 要約
    ● Unicode.Scalar.Propertiesという複数のプロパティが追加された
    メリット
    ● Unicode.Scalarの中身を確かめやすくなった。
    (大文字? 小文字? 絵文字?など)
    2
    Unicode
    プロパティ
    の追加
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

  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より

    View Slide

  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より

    View Slide

  14. 要約
    ● dictionary型のvalueに対してcompactMapValueを使えるよう
    になった
    ● 配列に対するcompactMapみたいなもの
    メリット
    ● dictionaryの値に対して適合しない型や、 nilを除外したdictionaryを作るこ
    とができる。
    5
    Contact
    ValueMap
    の追加
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

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

    View Slide

  16. 要約
    ● Intが何の倍数か教えてくれる
    メリット
    ● %を使うよりも可読性が向上した
    ● IDEがAuto fillしてくれるのでタイピングが楽
    ● 小さい単位で再利用が可能
    ● %を使った計算で間違うリスクが減る
    ● パフォーマンスの向上
    7
    isMultiple
    の追加
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

  17. 要約
    ● 文字列補間をカスタマイズできるようになった
    メリット
    ● クラスのインスタンスプロパティをデバッガなどに表示できる。
    ● URLやメアドなどの文字列補間がよりシンプルにかけるようになった
    8
    文字列補間の
    カスタマイズ
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia
    https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0参考に実装

    View Slide

  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より

    View Slide

  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より

    View Slide

  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より

    View Slide

  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より

    View Slide

  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を参考に実装

    View Slide

  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より

    View Slide

  24. 要約
    ● Rangeやそれに関連する型をCodableプロトコルに準拠させた
    メリット
    ● DateやMeasurementなどを使って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より

    View Slide

  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より

    View Slide

  26. 3. 言語仕様 / コンパイラの
    アップデート
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

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

    View Slide

  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を参考に実装

    View Slide

  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より

    View Slide

  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より

    View Slide

  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より

    View Slide

  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よりコード引用

    View Slide

  33. Swift5.0 キャッチアップ完了!
    Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

    View Slide

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

    View Slide

  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

    View Slide