func fetch<T: Decodable> (
of decodable: T.Type,
completionHandler: @escaping (Result<T, Error>) -> ()
) {
URLSession.shared.dataTask(with: someRequest) { data, _, error in
if let error {
// .failure 케이스에 associated value의 값으로 에러를 담아준다.
completionHandler(.failure(error))
return
}
guard let data else {
completionHanlder(.failure(NSError(domain: "No Data", code: 0, userInfo: nil)))
return
}
do {
let result = try JSONDecoder().decode(T.self, from: data)
completionHanlder(.success(result))
} catch {
completionHanlder(.failure(error))
}
}
}