【问题标题】:how to read local JSON with Alamofire in Swift如何在 Swift 中使用 Alamofire 读取本地 JSON
【发布时间】: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:)
  • 如果上述方法对您有用,您能否将其添加为答案并将其标记为已解决?

标签: json swift alamofire jsondecoder


【解决方案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)`

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多