gpt4 book ai didi

swift - 结果类型 通用参数 'T' 无法快速推断 5

转载 作者:行者123 更新时间:2023-12-01 12:06:18 25 4
gpt4 key购买 nike

我试图了解我可以在协议(protocol)中使用多少泛型。我的想法如下:

protocol Network {
func fetchCodable<T:Codable>(urlRequest:URLRequest, completion:@escaping (Result<T,Error>)->Void)

}

然后我创建了一个名为 AppNetwork 的类来实现网络协议(protocol)。
extension AppNetwork:Network{
func fetchCodable<T>(urlRequest: URLRequest, completion: @escaping (Result<T, Error>) -> Void) where T : Decodable, T : Encodable {

URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in

if let error = error {
completion(.failure(error))
return
}

guard let data = data else{
completion(.failure(AppNetworkError.dataCorrupted))
return
}

do {
let response = try JSONDecoder().decode(T.self, from: data)
completion(.success(response))
}
catch let decodeError{
completion(.failure(decodeError))
}

}.resume()


}

此类是 NetworkHelper 的一部分,它实现了检索数据的功能,例如:
class NetworkHelper{
let network:Network = AppNetwork()
}
...
//MARK:- Public methods
extension NetworkHelper{

func getVenueDetails(inLocation:String, offset:Int, limit:Int, radius:Int = 1000,completion:(Result<VenueDetailsSearchResult, Error>)->Void){

guard let foursquareConfig = foursquareConfig else{
completion(.failure(NetworkHelper.NetworkHelperError.invalidFourSquareConfig))
return
}

var venuesURLString = EndPoints.venueSearch.rawValue + "?"
venuesURLString += foursquareConfig.getFormattedParams
venuesURLString += "&near=\(inLocation)&radius=\(radius)&offset=\(offset)&limit=\(limit)"

guard let venuesURL = URL(string: venuesURLString) else{
completion(.failure(NetworkHelper.NetworkHelperError.invalidURL))
return
}

let venuesURLRequest = URLRequest(url: venuesURL, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 10)
network.fetchCodable(urlRequest: venuesURLRequest) { result in



}

}

}

在这种情况下,我试图获得一个结果,但我收到一条消息错误:“无法推断通用参数'T'”

如果我能那样做,我该怎么做?

谢谢

最佳答案

您必须告诉编译器您期望的类型。

network.fetchCodable(urlRequest: venuesURLRequest) { (_ result: Result<VenueDetailsSearchResult, Error>) in
// ...
}

关于swift - 结果类型 通用参数 'T' 无法快速推断 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56433489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com