Я понимаю, что вы пытаетесь сделать, но главная проблема в том, что вы никогда не указываете тип. Компилятор знает, что вы хотите вызвать fetch
, но он не знает, что вы хотите получить или что анализировать.
Если вы посмотрите на ваш fetch
вызов, то нигде не найдется, где компилятор мог бы сообщить, что вы пытаетесь сделать или что вы ожидаете.
У вас либо есть до:
1. Передайте тип в качестве параметра
func fetch<T: Decodable>(_ type: T.Type, _ completion: @escaping (Result<T, PostError>) -> Void) {
do {
let data = Data(jsonString.utf8)
let post = try JSONDecoder().decode(T.self, from: data)
completion(.success(post))
}
catch {
completion(.failure(.empty))
}
}
fetch(Post.self) { res in
switch res {
case .success(let p):
print(p)
case .failure(let error):
print(error)
}
}
или ...
2. Укажите тип при создании экземпляра объекта, членом которого является функция:
struct Fetcher<T: Decodable> {
func fetch(_ completion: @escaping (Result<T, PostError>) -> Void) {
do {
let data = Data(jsonString.utf8)
let post = try JSONDecoder().decode(T.self, from: data)
completion(.success(post))
}
catch {
completion(.failure(.empty))
}
}
}
let fetcher = Fetcher<Post>()
fetcher.fetch { res in
switch res {
case .success(let p):
print(p)
case .failure(let error):
print(error)
}
}