我正在尝试加载与我正在处理的 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
。有人遇到过这样的问题吗?知道我做错了什么吗?
你应该使用
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")
// ...
}