在Swift 5中使用泛型解析JSON-本地文件与URL

问题描述

我有以下两个函数用于帮助在Swift中解析JSON。第一个函数可以与我抛弃的任何JSON完美结合。

第二种方法是让我适应,但我无法弄清楚问题所在。我本质上想做与第一个函数相同的事情,但是我的数据来自URLSession而不是本地文件。

有什么想法我在这里做错了吗?我收到一个奇怪的编译器错误,即 void函数中意外的非void返回值,但签名完全相同。

import Foundation
import SwiftUI


// Populates Model from local files
public func loadFromJson<T: Decodable>(_ filename: String) -> T {
    let data: Data
    
    guard let path = Bundle.main.path(forResource: filename,ofType: "json")
   
    else{
        fatalError("\(filename) not found.")
    }
    do {
        let file = URL(fileURLWithPath: path)
        data = try Data(contentsOf: file)
    } catch {
        fatalError("Could not load \(filename): (error)")
    }
    
    do{
        return try JSONDecoder().decode(T.self,from: data)
    } catch {
        fatalError("Unable to parse \(filename): (error)")
    }
}

// Populates Model from REST endpoint
public func loadFromJsonFromURL<T: Decodable>(_ urlString: String) -> T {
    let data: Data
    
    let url = URL(string: urlString)!

    let task = URLSession.shared.dataTask(with: url) { data,response,error in
        
        if let error = error {
            fatalError("Error: \(error.localizedDescription)")
        }
        
        
        guard let response = response as? HTTPURLResponse,response.statusCode == 200 else {
            fatalError("Error: invalid HTTP response code")
        }
        
        guard let data = data else {
            fatalError("Error: missing response data")
        }

        do {
            return try JSONDecoder().decode(T.self,from: data)
        }
        catch {
            print("Error: \(error.localizedDescription)")
        }
    }
    task.resume()
    
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)