问题描述
我有以下两个函数用于帮助在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 (将#修改为@)