Swift 此函数参数的用途是什么? func加载(\filename:String,as-type:T.type=T.self)->T{ 让数据:数据 guard let file=Bundle.main.url(forResource:filename,扩展名:nil) 否则{ fatalError(“在主捆绑包中找不到\(文件名)。” } 做{ 数据=尝试数据(contentsOf:file) }抓住{ fatalError(“无法从主捆绑包加载\(文件名):\n\(错误)”) } 做{ let decoder=JSONDecoder() 返回try decoder.decode(T.self,from:data) }抓住{ fatalError(“无法将\(文件名)解析为\(t.self):\n\(错误)”) } } 加载(“jsonFilePath”)
该函数从JSON中提取数据。Swift 此函数参数的用途是什么? func加载(\filename:String,as-type:T.type=T.self)->T{ 让数据:数据 guard let file=Bundle.main.url(forResource:filename,扩展名:nil) 否则{ fatalError(“在主捆绑包中找不到\(文件名)。” } 做{ 数据=尝试数据(contentsOf:file) }抓住{ fatalError(“无法从主捆绑包加载\(文件名):\n\(错误)”) } 做{ let decoder=JSONDecoder() 返回try decoder.decode(T.self,from:data) }抓住{ fatalError(“无法将\(文件名)解析为\(t.self):\n\(错误)”) } } 加载(“jsonFilePath”),swift,generics,types,Swift,Generics,Types,该函数从JSON中提取数据。 “参数”type:T.type=T.self用于什么?如果删除此参数,代码仍然有效。那么我需要它做什么呢?这个参数只是一个助手,可以使用以下三种声明 func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T { let data: Data guard let file = Bundle.main.url(forResource: file
“参数”type:T.type=T.self用于什么?如果删除此参数,代码仍然有效。那么我需要它做什么呢?这个参数只是一个助手,可以使用以下三种声明
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")
如果要使用第一种声明,可以将其从方法签名中删除。此参数只是使用以下三种声明的助手
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")
如果您想使用第一种声明,可以将其从方法签名中删除。与您的问题无关,但您可以对您的问题使用单个do标记,只要您显式地指定结果类型,您就不需要在什么地方显式地指定结果类型?您需要将结果对象分配给变量。与您的问题不相关,但您可以使用单个do命令。关于您的问题,您不需要明确指定结果类型。我在哪里明确指定结果类型?您需要将结果对象指定给变量。相关的3)让model=self.load(“国家”)作为model我试图理解T.self的作用。这是基于赋值中的类型声明自动假定的吗?@Chris是的,Swift自动推断将计算出实际的类型。3)让model=self.load(“国家”)作为model我试图理解T.self的作用。这是基于赋值中的类型声明自动假定的吗?@Chris是的,Swift自动推断将计算出实际的类型。