首页 > 解决方案 > 如何在 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()
    }

标签: jsonswiftalamofirejsondecoder

解决方案


您正在传递一个路径 (a String),因此URLConvertibleon 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)`

但我更喜欢第一个解决方案,让我们避免手动转换。


推荐阅读