Как использовать пакет в SwiftUI с изображением
Например: у меня в проекте есть Bundle, он называется Game.Bundle.
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
но Bundle не работает.
как я могу использовать собственный пакет

Ответы
SwiftUI Image(_ , bundle: _)
ищет ресурс изображения в каталоге Assets соответствующего пакета. В вашем случае изображение просто встроено как обычный файл, поэтому вам нужно найти и загрузить его как файл. Image
сам не может этого сделать, поэтому он должен быть построен с тем, UIImage
чтобы иметь такую возможность.
Итак, предполагая, что вы находитесь Game.bundle
в PlugIns
подпапке основного пакета (если нет - просто исправьте соответствующую конструкцию пути ниже), вот возможный подход.
Протестировано с 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)
}
}
Ваш фрагмент кода , как это предусмотрено , кажется, ссылаться b
как в self
качестве экземпляра и локальной переменной
let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)
Ты хотел?
let bundle :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
let image = Image("Giyuu",bundle:bundle)
Или проведен рефакторинг для устранения принудительных развертываний !
с добавлением анализа проблем.
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
}