はじめに
本記事は iOS Advent Calendar 2022 その2 の1日目の記事です。
モジュール内の特定のクラスのみインポートする方法を紹介します。
環境
- OS:macOS Ventura 13.0.1
- Xcode:14.1 (14B47b)
- Swift:5.7.1
結論
import class {モジュール名}.{クラス名}
でモジュール内の特定のクラスのみインポートできます。
例えば UIKit
モジュールの UIImage
クラスのみインポートする場合、以下のように書きます。
import class UIKit.UIImage
let image = UIImage(named: "uhooi")
UIKit
モジュール内の他のクラスを呼び出そうとすると、ビルドエラーになります。
import class UIKit.UIImage
let color: UIColor = .red // ❌: Cannot find type 'UIColor' in scope
注意
import kindを忘れずに付ける
class
などのimport kindを付けずに import {モジュール名}.{クラス名}
とすると、クラスでなくサブモジュールの指定となり、場合によっては import {モジュール名}
と同じ動きになるようです。
import {import kind} {module}.{symbol name}
import {module}.{submodule}
引用: https://docs.swift.org/swift-book/ReferenceManual/Declarations.html
例えば import UIKit.UIImage
だと、 UIColor
など他の UIKit
モジュール内のクラスも呼び出せてしまいます。
私は今までこの書き方をしていたため、急いで修正しました。
ビルド時間とバイナリサイズはほぼ変わらない
try! Swift Tokyo Conference 2019のある発表によると、インポートを絞ってもバイナリサイズは変わらず、平均ビルド時間はむしろ増えたようです。
そのため、ビルド時間の短縮やバイナリサイズの縮小を目的に行うのは意味がなさそうです。
おわりに
Swiftでは特定のクラスのみインポートしたいユースケースは少ないかもしれません。
私はView層以外でUIKitを使いたいときに、UIKitの他のクラスを呼び出していないことを明確にするために使います。
以上 iOS Advent Calendar 2022 その2 の1日目の記事でした。
明日はまだ埋まっていません。