2017-12-07 16 views
1

그래서 github에서 alamofire 및 object mapper 라이브러리를 사용하고 있습니다. 내 기능에서Swift 함수 일반 매개 변수

이 코드

Alamofire.request(urlRequest).responseObject { (response: DataResponse<News>) in } 

나는 또한

switch response.result { 
      case .success: 
       if let object = responseObject { 
        completion(object) 
       } 
       break; 
      case .failure(let error): 
       print(error) 
       if let statusCode = response.response?.statusCode { 
        var message = String() 
        switch statusCode { 
         //status code checking here 
        } 
       } 
       else { 
        var message = String() 
        message = error.localizedDescription 
       } 
       break; 
     } 

그래서 내가 여러 호출 API와 API를 호출을 모두 가지고있는 상태 코드와 함께 확인 응답을에게이 것 또한 이 상태 코드 검사를 구현하십시오. 내 모든 API 호출 기능을 위해 복사 붙여 넣기를이 코드 덩어리를 유지하지 않으

그래서 내가 할 계획입니다 것은 API 호출에서 상태 코드를 확인하기 위해 전용 기능을 만드는 것입니다

그러나 나는 하나의 문제에 직면 해있다. 모든 유형의 DataResponse <을 수용하는 제네릭 함수 매개 변수를 어떻게 만들 수 있습니까?

는이 코드를 실행하려고했지만 실패

DataResponse <는> 항상 alamofire.responseObject으로 제공되는 모델에 따라 변경됩니다
// validateResponse function 
static func validateResponse(dataResponse: DataResponse<Any>) -> String { 
    // status code checking here 
} 

// inside the alamofire.request response 
validateResponse(dataResponse: response) 

// return me this error 
Cannot convert value of type 'DataResponse<News>' to expected argument type 'DataResponse<Any>' 

사람이 그것을 제대로 수행하는 방법에 나를 인도 할 수

? 감사!

답변

3

제네릭을 사용해야합니다!

static func validateResponse<T>(dataResponse: DataResponse<T>) -> String { 
    // status code checking here 
} 

사용법 :

validateResponse(dataResponse: response) 

T 추론됩니다 일반 매개 변수는 방법은 다음과 같은 경우로 될 것입니다 News 수 :

static func validateResponse(dataResponse: DataResponse<News>) -> String { 
    // status code checking here 
}