调用方法时无法推断通用参数'T'

问题描述 投票:0回答:1

我遇到错误无法推断通用参数“ T”

我已经创建了一个方法,当我尝试调用该方法然后收到该错误时。我在下面添加了这两种方法。

 func requestNew<T> ( _ request: URLRequest, completion: @escaping( Result< T ,  NetworkError>) -> Void ) where T : Decodable {

         URLCache.shared.removeAllCachedResponses()

    print("URL \((request.url as AnyObject).absoluteString ?? "nil")")
        //use the currentrequest for cancel or resume alamofire request
        currentAlamofireRequest =   self.sessionManager.request(request).responseJSON { response in
             //validate(statusCode: 200..<300)
            if response.error != nil {
                var networkError : NetworkError = NetworkError()
                networkError.statusCode = response.response?.statusCode
                if response.response?.statusCode == nil{
                    let error = (response.error! as NSError)
                    networkError.statusCode = error.code
                }
                //Save check to get the internet connection is on or not
                if self.reachabilityManager?.isReachable == false {
                    networkError.statusCode = Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue)

                }

                completion(.failure(networkError))
            }else{
                print("response --- > ",String(data: response.data!, encoding: .utf8) ?? "No Data found")
                if let responseObject = try? JSONDecoder().decode(T.self, from: response.data!) {
                    completion(.success(responseObject.self))
                }else {
                }

            }
        }
    }

下面是错误的屏幕截图![ ]1

func getVersion1(complete :@escaping (Response<Version>) -> Void, failure:@escaping onFailure) {
self.network.requestNew(self.httpRequest) { (result) in
    print("hello")
}
ios swift iphone generics swift5
1个回答
0
投票

尽管Swift不能接受通用参数,尽管它接受方法的通用声明,但是您可以通过传递类型固定参数来指定类型。

尝试一下:

    func getVersion1(complete :@escaping (Response<Version>) -> Void, failure:@escaping onFailure) {
        self.network.requestNew(self.httpRequest) { (result: Result<Version, NetworkError>) in
            print("hello")
        }
    }

如果Result<Version, NetworkError>不是您期望的类型,则可能需要将Result<SomeDecodableType, NetworkError>更改为Version。>

© www.soinside.com 2019 - 2024. All rights reserved.