How to Use Bundle In SwiftUI with Image

寵の児 提交于 2021-02-10 07:24:14

问题


For example: i have Bundle in project , it is call "Game.Bundle"

let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)

but Bundle not work .

how can i use custom Bundle


回答1:


The SwiftUI Image(_ , bundle: _) looks for image resource in corresponding bundle's Assets catalog. In your case the image is just embedded as regular file, so you have to find and load it as file. Image itself cannot do that, so it should be constructed with UIImage that has such possibility.

So, assuming you Game.bundle is in PlugIns subfolder of main bundle (if not - just correct corresponding path construction below) here is possible approach.

Tested with 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)
    }
}



回答2:


Your snippet as provided seems to reference b both in self as an instance and as a local variable

let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)

Did you want?

let bundle :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
let image = Image("Giyuu",bundle:bundle)

Or refactored to eliminate force unwraps ! with some problem analysis added.

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
}


来源:https://stackoverflow.com/questions/63470030/how-to-use-bundle-in-swiftui-with-image

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!