如何在 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中使用alamofire上传图库图片

如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire

如何在 Swift 中使用 Alamofire 读取本地 JSON

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?

如何让 Freddy 在 Swift 中使用 AlamoFire?