【发布时间】:2019-10-22 10:23:35
【问题描述】:
func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
load("jsonFilePath")
该函数从 JSON 中提取数据。
type: T.Type = T.self 的“参数”是什么?如果我删除此参数,代码仍然有效。那我需要它做什么?
【问题讨论】:
-
与您的问题无关,但您可以使用单个 do catch
-
关于您的问题,您不需要,只要您在某处明确指定结果类型即可
-
在哪里明确指定结果类型?
-
您需要将结果对象分配给一个变量。相关stackoverflow.com/questions/47544675/flatten-any-array-swift/…