寄付窓口はこちら

Keypath入門 | try! Swift Tokyo 2019 1-7

KeypathはSwift 4で追加された機能です。素晴らしい機能を持っていますが、時折使い所を見つけるのが難しく感じます。しかし、Keypathを理解して正しく使えた時、ジェネリクスプロトコルによるさらなる抽象化を実装できます。ただし、これを行えるようにするには、Keypathのパターンをいつ適用するかの直感的な理解が役に立ちます。このトークでは、まず、存在するさまざまな種類のKeypathについて説明し、次に実際の例を通して、それらが自分のプロジェクトでどのように活用できるかを紹介します。

f:id:niwatako:20190321122243j:plain

このトークはSwiftのKeypathの紹介です

f:id:niwatako:20190321122349j:plain

f:id:niwatako:20190321122353j:plain

ReadWriteプロパティにつかえる。コンポーザブルというのはあとで。

f:id:niwatako:20190321122414j:plain

f:id:niwatako:20190321122419j:plain

何を学んでいただくのか

いろんな例を見ていきます。

Settingがあります。ディスプレイネーム、スコアなども見せていく、それからパスコード

f:id:niwatako:20190321122505j:plain

何が難しいのか、

f:id:niwatako:20190321122519j:plain

f:id:niwatako:20190321122539j:plain

f:id:niwatako:20190321122545j:plain

f:id:niwatako:20190321122553j:plain

まずは導入

f:id:niwatako:20190321122604j:plain

新しいプレーヤーを作ります、マリオさん

f:id:niwatako:20190321122628j:plain

f:id:niwatako:20190321122634j:plain

ルイージに変えるということを伝えられる

f:id:niwatako:20190321122657j:plain

変数は動かしたり格納したりできる

f:id:niwatako:20190321122712j:plain

f:id:niwatako:20190321122728j:plain

ネスティングもできます

f:id:niwatako:20190321122806j:plain

Keypathは様々なものになりうる

f:id:niwatako:20190321122814j:plain

f:id:niwatako:20190321122835j:plain

f:id:niwatako:20190321122839j:plain

readonryには書き込めない

writableKeyPathは書き込める

f:id:niwatako:20190321122910j:plain

f:id:niwatako:20190321122915j:plain

f:id:niwatako:20190321122919j:plain

PartialKeyPathはルートだけあるもの

f:id:niwatako:20190321122939j:plain

型消去したものになる

汎用性が高い

f:id:niwatako:20190321123000j:plain

f:id:niwatako:20190321123007j:plain

AnyKeypathもある

f:id:niwatako:20190321123013j:plain

全く違うものを入れられる

f:id:niwatako:20190321123023j:plain

もとに戻すこともできる

f:id:niwatako:20190321123038j:plain

次のステップ

f:id:niwatako:20190321123056j:plain

Keypathだけが提供している機能です。

f:id:niwatako:20190321123114j:plain

まとめることができる

f:id:niwatako:20190321123123j:plain

f:id:niwatako:20190321123141j:plain

事例

f:id:niwatako:20190321123207j:plain

f:id:niwatako:20190321123223j:plain

データ構造がそれぞれ違う、ネスト型がある

f:id:niwatako:20190321123255j:plain

抽象化して表示して編集するやり方がほしい。

これに加えてメタ情報がある

f:id:niwatako:20190321123314j:plain

f:id:niwatako:20190321123335j:plain

f:id:niwatako:20190321123339j:plain

Protocolをいれる

f:id:niwatako:20190321123347j:plain

f:id:niwatako:20190321123405j:plain

f:id:niwatako:20190321123409j:plain

f:id:niwatako:20190321123418j:plain

f:id:niwatako:20190321123436j:plain

f:id:niwatako:20190321123520j:plain

f:id:niwatako:20190321123527j:plain

f:id:niwatako:20190321123533j:plain

設定のイテレーション

f:id:niwatako:20190321123601j:plain

f:id:niwatako:20190321123606j:plain

ネストされているのもほしい

f:id:niwatako:20190321123612j:plain

これも反復してイテレーションしなければならない

f:id:niwatako:20190321123630j:plain

f:id:niwatako:20190321123638j:plain

f:id:niwatako:20190321123656j:plain

f:id:niwatako:20190321123700j:plain

f:id:niwatako:20190321123705j:plain

f:id:niwatako:20190321123710j:plain

最後に、再帰的にする

f:id:niwatako:20190321123725j:plain

f:id:niwatako:20190321123734j:plain

ディスプレイをしたい、編集をしたい

f:id:niwatako:20190321123755j:plain

f:id:niwatako:20190321123800j:plain

値をプロバイダーの中で変えていくこともできる。すべてのセッティングの中でこれを変えてディスプレイして

抽象的な形でできる

f:id:niwatako:20190321123841j:plain

f:id:niwatako:20190321123846j:plain

何が出来たのでしょう

f:id:niwatako:20190321123856j:plain

f:id:niwatako:20190321123905j:plain

f:id:niwatako:20190321123929j:plain

例を紹介します

f:id:niwatako:20190321123936j:plain

どの型を消去するのかを考える

f:id:niwatako:20190321124006j:plain

2.タイプをすぐに戻せる

3.そして、Hashableに準拠する。Dictionaryの中でKeyとして使える

f:id:niwatako:20190321124101j:plain

f:id:niwatako:20190321124107j:plain

f:id:niwatako:20190321124132j:plain

Typeが一致していなくてもちゃんと返してくれる

f:id:niwatako:20190321124148j:plain

役立つライブラリがある

f:id:niwatako:20190321124201j:plain

f:id:niwatako:20190321124204j:plain

f:id:niwatako:20190321124208j:plain

f:id:niwatako:20190321124222j:plain

クエリをかけたいときキーパスを使えば安全にコンパイルされる

f:id:niwatako:20190321124249j:plain

f:id:niwatako:20190321124321j:plain

複数プロパティでソートできる

f:id:niwatako:20190321124326j:plain

f:id:niwatako:20190321124345j:plain

プロトコルで難しかった抽象化が可能になります。

f:id:niwatako:20190321124358j:plain

f:id:niwatako:20190321124413j:plain

ここでブログの紹介

f:id:niwatako:20190321124425j:plain

Podcastも2週間に1回ぐらいやっています

f:id:niwatako:20190321124438j:plain

ハンブルクSNSの会社をやっています。仕事したい方、こんなにきれいなところですよ

f:id:niwatako:20190321124457j:plain

ありがとうございました。