Для чего этот параметр функции? - PullRequest
1 голос
/ 07 июня 2019
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? Если я уберу этот параметр, код все равно будет работать. Так зачем мне это?

1 Ответ

4 голосов
/ 07 июня 2019

Этот параметр является просто помощником для использования трех видов объявлений, как показано ниже:

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

Вы можете удалить его из сигнатуры метода, если хотите использовать первый тип объявлений.

...