json - 如何在 Swift 中使用 Alamofire 读取本地 JSON
问题描述
我有一个本地 json 文件,我使用 Bundle.main.path 函数访问文件路径,但出现错误。
服务
class Service {
fileprivate var baseURL: String?
init(baseURL: String) {
self.baseURL = baseURL
}
func getAllData() {
AF.request(self.baseURL!, method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil, interceptor: nil, requestModifier: .none).response { (responseData) in
guard let data = responseData.data else { return }
do {
let packages = try JSONDecoder().decode(Package.self, from: data)
print(packages)
} catch let error {
print(error.localizedDescription)
}
}
}
}
视图控制器
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
guard let url = Bundle.main.path(forResource: "packageList", ofType: "json") else { return }
let service = Service(baseURL: url)
service.getAllData()
}
解决方案
您正在传递一个路径 (a String
),因此URLConvertible
on String 将调用 a URL(string: path)
,这最终将是无效的,但要使其工作,它需要改为调用URL(fileURLWithPath: path)
。
guard let url = Bundle.main.path(forResource: "packageList", ofType: "json") else { return }
=>
guard let url = Bundle.main.url(forResource: "packageList", withExtension: "json") else { return }
或者
guard let path = Bundle.main.path(forResource: "packageList", ofType: "json") else { return }
let url = URL(fileURLWithPath: path)`
但我更喜欢第一个解决方案,让我们避免手动转换。
推荐阅读
- c# - Naudio ImaAdpcmWaveFormat,BufferedWaveprovider 不高兴
- django - Django 序列化程序获取相关字段
- ios - 创建反应本机库并将 CocoaPods 添加到该库
- javascript - 在输入编号中的向上/向下按钮处检测不同的事件
- hive - 如何获得总和(列)(按其他列分区)?
- ios - Delphi XE7 为 iOS 7+ 开发
- firebase - Firebase实现order by field和count方法
- node.js - 2 setInterval 以不同的时间间隔修改同一个数组
- python - 在 python 中进行文件操作的 Pickel 和 CSV 的替代品
- spring-mvc - 如何用spring搭建一个像twitch这样的流媒体网站