如何在 Swift 中使用 Alamofire 读取本地 JSON
Posted
技术标签:
【中文标题】如何在 Swift 中使用 Alamofire 读取本地 JSON【英文标题】:how to read local JSON with Alamofire in Swift 【发布时间】:2020-09-24 16:29:17 【问题描述】:我有一个本地 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()
【问题讨论】:
1.为什么要为此使用 Alamofire? 2.您的网址应以“file://”开头 使用url(forResource: withExtension:)
而不是path(forResource:ofType:)
。
如果上述方法对您有用,您能否将其添加为答案并将其标记为已解决?
【参考方案1】:
你正在传递一个路径(一个String
),所以String上的URLConvertible
会调用一个URL(string: path)
,这最终会是无效的,但是要让它工作,它需要调用@改为 987654325@。
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)`
但我更喜欢第一种解决方案,让我们避免手动转换。
【讨论】:
以上是关于如何在 Swift 中使用 Alamofire 读取本地 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire
如何在 Swift 中使用 Alamofire 读取本地 JSON
如何在 Swift 3 中使用 Alamofire 4 解析这个 json?