Swift Packageでリソースから画像を読み込む
これはSwift Packageを作成する際にリソースから画像データを読み込む方法です。
Swift Package作成時にリソースを含める
Swift Packageを作成する際にリソースを含めることができます。
方法はこのように説明されています。To add resources to a Swift package, do any of the following:
Drag them into the Project navigator in Xcode.
From the File menu in Xcode, choose Add Files to [packageName].
Use Finder or the Terminal app.
今回は.xcassets
ファイルの中に含まれる画像を読み込んでみます。
Swift Packageのリソースを指定する
通常のアプリの場合.xcassets
ファイルの中の画像はBundleを指定しなくても名前だけで読み込むことができます。例えば.xcassets
ファイルの中の"gazou"と言う名前の画像を読み込むには下記のコードのようになります。
let image = UIImage(named: "gazou")
しかし、Swift Packageの中ではこの方法は使えません。Bundleを指定する必要があります。
Important
Always use Bundle.module when you access resources. A package shouldn’t make assumptions about the exact location of a resource.
Swift PackageではリソースのBundleはBundle.module
になるのでこれを指定してアクセスします。
Bundleを指定して画像を読み込む
Bundleを指定して画像を読み込むのは下記のコードで可能です。
iOSの場合は
let image = UIImage(named: "gazou" in: Bundle.module, compatibleWith: nil)
これでUIImage
を読み込むことができます。
macOSの場合は
let image = Bundle.module.image(forResource: NSImage.Name("gazou"))
これでNSImage
を読み込めます。
Discussion