寄付窓口はこちら

脱Swiftリテラル初心者 | try! Swift Tokyo 2019 1-2

[https://twitter.com/freddi:embed]

皆さんのSwiftリテラルの深い理解への導きと、脱「リテラル初心者」の手助けをさせていただきます。Swift CodeからSIL、そしてLLVM IRコードまでの「リテラルオブジェクト」の旅を見て、コード上のただの文字列であるリテラルが「どのようにして私達(そしてアプリのユーザー)の手元にデータとして渡される準備が整うか」を、「Intrinsic Protocols(組み込みプロトコル)」とともに見ていきます。また、そこから「既存のIntrinsic Protocolsを利用したリテラル活用術」と、「Swift5.0 のリテラルのための新機能」にもフォーカスしていきます。一緒にSwiftのリテラルの世界を覗いて、Swiftリテラル初心者から大きな一歩を踏み出してみませんか?

f:id:niwatako:20190321102401j:plain

Swiftのリテラルを普段と違う麺から理解するお話をします。

f:id:niwatako:20190321102507j:plain

この42というリテラルがSwiftのIntになるまでを知ることで深い世界が分かる。

f:id:niwatako:20190321102530j:plain

SILでは型の情報とリテラルを活用する

f:id:niwatako:20190321102555j:plain

f:id:niwatako:20190321102601j:plain

f:id:niwatako:20190321102623j:plain

f:id:niwatako:20190321102637j:plain

たとえばIntの+演算子を呼んだとき、_valueを利用して、足し算である関数に引数として渡す。

次はリテラルから直接オブジェクトが生成できることについて

f:id:niwatako:20190321102703j:plain

プロトコルが大きく関わっています

CGFloatで例が見れます

f:id:niwatako:20190321102721j:plain

f:id:niwatako:20190321102745j:plain

どういうプロトコルの組み込みがあるか分かる

f:id:niwatako:20190321102802j:plain

リテラルから表現できるIntやFloatなどはこのプロトコルに準拠している

f:id:niwatako:20190321102821j:plain

f:id:niwatako:20190321102844j:plain

これをうまく活用しているのがCGFloat

CPUアーキテクチャごとに効率的に扱えるFloat型を提供している

Swift5.0から、

f:id:niwatako:20190321102908j:plain

解釈優先度が変わる。

SILを見比べて復習してみてください。

この後共有するスライドに加筆します。

f:id:niwatako:20190321102940j:plain

リテラルを知る切っ掛けやSwiftへのレイヤーの深い興味の種になれば幸いです。

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