Cara Menggunakan Bundel Di SwiftUI dengan Gambar
Misalnya: saya memiliki Bundle dalam proyek, itu disebut "Game.Bundle"
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
tapi Bundle tidak berfungsi.
bagaimana cara menggunakan Bundel kustom

Jawaban
SwiftUI Image(_ , bundle: _)
mencari sumber gambar dalam katalog Aset bundel yang sesuai. Dalam kasus Anda, gambar hanya disematkan sebagai file biasa, jadi Anda harus mencari dan memuatnya sebagai file. Image
sendiri tidak bisa melakukan itu, jadi harus dibangun dengan UIImage
kemungkinan seperti itu.
Jadi, dengan asumsi Anda Game.bundle
berada di PlugIns
subfolder dari bundel utama (jika tidak - perbaiki konstruksi jalur yang sesuai di bawah) di sini adalah pendekatan yang mungkin.
Diuji dengan Xcode 12 / iOS 14
struct ContentView: View {
var body: some View {
Image(uiImage: gameImage(name: "test") ?? UIImage())
}
func gameImage(name: String, type: String = "png") -> UIImage? {
guard let plugins = Bundle.main.builtInPlugInsPath,
let bundle = Bundle(url: URL(fileURLWithPath:
plugins).appendingPathComponent("Game.bundle")),
let path = bundle.path(forResource: name, ofType: type)
else { return nil }
return UIImage(contentsOfFile: path)
}
}
Cuplikan Anda seperti yang diberikan tampaknya merujuk b
baik self
sebagai instance maupun sebagai variabel lokal
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
Apakah Anda ingin?
let bundle :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
let image = Image("Giyuu",bundle:bundle)
Atau refactored untuk menghilangkan force unwraps !
dengan menambahkan beberapa analisis masalah.
func getGiyuuImage() -> Image {
guard let path = Bundle.main.path(forResource:"Game", ofType:"bundle"), let bundle = Bundle(path: path) else {
fatalError("dev error - no Game bundle")
}
let image = Image("Giyuu",bundle: bundle)
return image
}