Comment utiliser Bundle dans SwiftUI avec image
Par exemple : j'ai Bundle dans le projet, il s'appelle "Game.Bundle"
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
mais Bundle ne fonctionne pas.
comment puis-je utiliser un bundle personnalisé

Réponses
SwiftUI Image(_ , bundle: _)
recherche la ressource d'image dans le catalogue d'actifs du bundle correspondant. Dans votre cas, l'image est simplement intégrée en tant que fichier normal, vous devez donc la rechercher et la charger en tant que fichier. Image
lui-même ne peut pas faire cela, il devrait donc être construit avec UIImage
qui a une telle possibilité.
Donc, en supposant que vous êtes Game.bundle
dans le PlugIns
sous-dossier du bundle principal (sinon - juste la construction correcte du chemin correspondant ci-dessous), voici une approche possible.
Testé avec 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)
}
}
Votre extrait tel qu'il est fourni semble faire référence à b
la fois en self
tant qu'instance et en tant que variable locale
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
Vouliez-vous?
let bundle :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
let image = Image("Giyuu",bundle:bundle)
Ou refactorisé pour éliminer la force de déballage !
avec une analyse de problème ajoutée.
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
}