【问题标题】:What is this function parameter for?这个函数参数是干什么用的?
【发布时间】: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 的“参数”是什么?如果我删除此参数,代码仍然有效。那我需要它做什么?

【问题讨论】:

标签: swift generics types


【解决方案1】:

此参数只是使用以下三种声明的助手,

1) let model: Model = self.load("Countries")
2) let model = self.load("Countries", as: Model.self)
3) let model = self.load("Countries") as Model 

如果你想使用第一种声明,你可以从方法签名中删除它。

【讨论】:

  • 3) 让 model = self.load("Countries") as Model
  • 我试图了解 T.self 的来源。这是基于赋值中的类型声明以某种方式自动假设的吗?
  • @Chris 是的,Swift 自动推断会找出实际类型。
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 2013-03-18
  • 2010-11-20
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多