Невозможно вызвать 'decode' со списком аргументов типа '(Decodable, from: Data)' - PullRequest
0 голосов
/ 22 января 2019

У меня есть следующий пример кода на игровой площадке.Я хочу декодировать результат сетевого запроса, если этот результат соответствует протоколу Decodable.

Есть идеи, почему этот код не работает?

protocol APIRequest {
    associatedtype Result
}

func execute<T: APIRequest>(request: T) {
    if let decodableResult = T.Result.self as? Decodable {
        try JSONDecoder().decode(decodableResult, from: Data())
    }
}

Я получаю сообщение об ошибке Cannot invoke 'decode' with an argument list of type '(Decodable, from: Data)' в этой строке: try JSONDecoder().decode(decodableResult, from: Data())

Любые входные данные приветствуются!

1 Ответ

0 голосов
/ 22 января 2019

Для метода JSONDecoder.decode(_:from:) требуется конкретный тип, соответствующий Decodable в качестве входного аргумента.Вам нужно добавить дополнительное ограничение типа к T.Result, чтобы сделать его Decodable.

func execute<T: APIRequest>(request: T) throws where T.Result: Decodable {
    try JSONDecoder().decode(T.Result.self, from: Data())
}

Кстати, какой смысл пытаться декодировать пустой экземпляр Data?

...