在 SWIFT 包中加载 JSON 资源时出现问题

问题描述 投票:0回答:1

我正在尝试加载与我正在处理的 Swift 包捆绑在一起的 JSON 文件。

JSON 文件名为

config.json
,它位于我的项目中的
/Sources/<Target>/data/config.json

更新:我还将资源添加到包描述中的目标,如下所示:

...
.target(
    name: "MyPackage",
    resources: [
        .process("data/config.json")
    ]
),
...

我尝试使用以下代码加载它:

guard let sourcesURL = Bundle.main.url(forResource: "config", withExtension: "json") else {
    fatalError("Could not find config.json")
}

...但我不断得到

nil
。有人遇到过这样的问题吗?知道我做错了什么吗?

json swift swift-package-manager
1个回答
2
投票

你应该使用

module

Bundle.module.url(forResource: "config", withExtension: "json")

而且您需要确保在构建时包含该文件,方法是将以下内容添加到 Package.swift 中的目标中

resources: [
    .copy("data/config.json") //This could also be .process
])

上面假设资源是从同一个包中加载的,如果你想从另一个包中加载资源,可以使用以下通用解决方案。

首先在包中定义一个常量,用于保存包的包标识符,例如在

Bundle

的扩展中
extension Bundle {
    public static let myPackageNameBundleIdentifier = Bundle.module.bundleIdentifier!
}

然后在另一个包或应用程序中加载资源时创建该 Bundle 的实例

if let bundle = Bundle(identifier: Bundle.myPackageNameBundleIdentifier) {
    let url = bundle.url(forResource: "config", withExtension: "json")
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.