13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOSAdvent Calendar 2022

Day 1

モジュール内の特定のクラスのみインポートする方法(Swift)

Last updated at Posted at 2022-12-06

はじめに

本記事は 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日目の記事でした。
明日はまだ埋まっていません。

参考リンク

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?