【发布时间】:2022-01-28 08:42:39
【问题描述】:
我正在尝试创建一个具有泛型参数函数的协议。
protocol APIRequest {
static func fetchData<T: Codable>(completion: @escaping(T?, NetworkError?) -> Void)
}
那么我有一个符合协议的结构
static func fetchData<Ztar: Codable>(completion: @escaping (Ztar?, NetworkError?) -> Void) {
let url = URLConstructor.url(scheme: "https", host: "swapi.dev" , path: "/api")
guard let url = url else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else {
completion(nil, NetworkError.badResponse)
return
}
do {
let decoder = JSONDecoder()
let object = try decoder.decode(Ztar.self, from: data)
completion(object, nil)
} catch {
print(error)
}
}
task.resume()
}
但我不确定泛型类型的实现是否正确,因为在我的ViewController 中,我收到错误无法推断泛型参数“Ztar”
NetworkManager.fetchData { star, error in
}
谁能解释我做错了什么?
【问题讨论】: