Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 此函数参数的用途是什么? 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

该函数从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: 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自动推断将计算出实际的类型。