寄付窓口はこちら

限定的なimportの明示とその効果 | try! Swift Tokyo 2019 1-5

普段なんとなく書いているimportですがサブモジュールや特定の要素を明示的に指定することができます。このセッションではこれらのimportの仕様を振り返り、またバイナリサイズやパフォーマンスに与える影響を考えていきます。

f:id:niwatako:20190321115326j:plain

今回ははじめての英語でのプレゼンテーションです

Importについて

f:id:niwatako:20190321115404j:plain

何気なく書いていますがいくつかのオプションをご存知ですか

f:id:niwatako:20190321115424j:plain

それぞれ説明します

f:id:niwatako:20190321115433j:plain

Attributeは書いてもいいし書かなくても良い

f:id:niwatako:20190321115439j:plain

Testableを使うとInternalにもアクセスできる

f:id:niwatako:20190321115455j:plain

Exportはシンボルを出力する。非推奨、開発時の利用に留める

f:id:niwatako:20190321115522j:plain

Submoduleの実装をインポートできる

f:id:niwatako:20190321115531j:plain

SceneKitがいい例

f:id:niwatako:20190321115551j:plain

3つ目、Kindを指定すると指定した要素を取り込む。

f:id:niwatako:20190321115602j:plain

Userというクラスだけ

f:id:niwatako:20190321115622j:plain

これらが指定できる

f:id:niwatako:20190321115634j:plain

注意は、クラスやストラクトは実装したメソッドやプロパティも含む。

2つ目は、オーバーロード関数に関する注意点。個別にインポートできない

異なるモジュールで同名関数を使っているときに必要になる

f:id:niwatako:20190321115718j:plain

モジュールを両方インポートするとエラーが起きる。

f:id:niwatako:20190321115736j:plain

Kindを使ったInportは優先的に見つける。

使い所が難しいですよね

使いやすい例は?

f:id:niwatako:20190321115756j:plain

ビルド時間計測

f:id:niwatako:20190321115812j:plain

結果は変わらず

f:id:niwatako:20190321115820j:plain

ビルド時間もバイナリサイズも変わらない

f:id:niwatako:20190321115827j:plain

バイナリファイルのMD5は一緒。Swiftコンパイラが最適化を行うので結果は同じ。

名前空間の問題がなければ、詳細に記述する必要はない。

f:id:niwatako:20190321115852j:plain

つまり、これまで通りコードを書きましょう。