Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

1 Stringの 特殊文字 要約 ● Stringの中で "" や \などの特殊文字 を扱う方法が簡単になった ● 特殊文字の前に \ をつける代わりに全体を # でくくる方式になっ た メリット ● 主に正規表現などを効率的に書きやすくなった Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

要約 ● 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より

Slide 13

Slide 13 text

要約 ● 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より

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

要約 ● 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より

Slide 19

Slide 19 text

要約 ● 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より

Slide 20

Slide 20 text

要約 ● 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より

Slide 21

Slide 21 text

要約 ● 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より

Slide 22

Slide 22 text

要約 ● 標準ライブラリで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を参考に実装

Slide 23

Slide 23 text

要約 ● 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より

Slide 24

Slide 24 text

要約 ● 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より

Slide 25

Slide 25 text

要約 ● 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より

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

要約 ● T(Literal)を使ってinitする時に強制的に変換してくれる メリット ● 今まではうまく変換されていなかったものにも変換されるようになっ た ● 型のチェックを効率的にして一部のロジックではパフォーマンスの向 上に繋がっている 18 リテラルを 使った 強制init Swift 5.0 Cheet Sheet - Kohei Arai @kokoheia 一部https://medium.com/@d_date/whats-new-in-swift-5-70225f063b87を参考に実装

Slide 29

Slide 29 text

要約 ● 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より

Slide 30

Slide 30 text

要約 ● 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より

Slide 31

Slide 31 text

要約 ● 型自身(\.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より

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

参考 ● 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