2016-09-19 3 views
2

ResponseSerializer에 문제가 있습니다. 해결되지 않은 식별자가 나옵니다. 응답에 대해 선언되지 않은 유형이 나타납니다. 응답이 여러 유형으로 변경되었다는 것을 alamofire migration doc에서 읽었습니다. 그래서 변경해야 응답 -> DataReponse하지만이 난 단지처럼 하나 개의 인수 전달할 수 있다는 것을 의미합니다 : 더 중요한 것은 내가 확장 4 alamofire하는 마이그레이션 어떻게 어떻게 오류가 계속 이런 식으로받을 수 있습니다Alamofire 3-> Reponse & ResponseSerializer Swift 3.0의 문제

// What I have 
Response(<ListWrapper, NSError>) 

// What I should change it to? 
DataResponse(<ListWrapper>) 

을하고?

내 클래스 :

class List{ 

    var idNumber: String? 
    var title: String? 
    var posterPath: String? 
    var release: String? 

    required init(json: JSON, id: Int?) 
    { 
     self.idNumber = json[ListFields.Id.rawValue].stringValue 
     self.title = json[ListFields.Title.rawValue].stringValue 
     self.posterPath = json[ListFields.PosterPath.rawValue].stringValue 
     self.release = json[ListFields.Release.rawValue].stringValue 
    } 

    class func setURL_APPEND(_ url: String) 
    { 
     URL_APPEND = url 
    } 

    // MARK: Endpoints 
    class func endpointForList() -> String 
    { 
     return URL_APPEND 
    } 


    fileprivate class func getListAtPath(_ path: String, completionHandler: @escaping (ListWrapper?, NSError?) -> Void) { 
     Alamofire.request(path) 
      .responseListArray { response in 

       if let error = response.result.error 
       { 
        completionHandler(nil, error) 
        return 
       } 
       completionHandler(response.result.value, nil) 
     } 
    } 

    class func getList(_ completionHandler: @escaping (ListWrapper?, NSError?) -> Void) 
    { 
     getListAtPath(List.endpointForList(), completionHandler: completionHandler) 
    } 


} 
// Problem is here: 
// for ResponseSerializer I get an unresolved identifier 
// and for Response I get an undeclared type 
extension Alamofire.Request { 
    func responseListArray(_ completionHandler: @escaping (Response<ListWrapper, NSError>) -> Void) -> Self { 
     let responseSerializer = ResponseSerializer<ListWrapper, NSError> { request, response, data, error in 

      guard error == nil else 
      { 
       return .failure(error!) 
      } 
      guard let responseData = data else { 
       let failureReason = "Array could not be serialized because input data was nil." 
       let error = Alamofire.Error.errorWithCode(.dataSerializationFailed, failureReason: failureReason) 
       return .failure(error) 
      } 

      let JSONResponseSerializer = Request.JSONResponseSerializer(options: .allowFragments) 
      let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error) 

      switch result { 
      case .success(let value): 
       let json = SwiftyJSON3.JSON(value) 
       let wrapper = ListWrapper() 

       var allList:Array = Array<List>() 

       wrapper.totalCount = json["favorite_count"].intValue 

       // print(json) 
       let results = json["items"] 
       // print(results) 
       for jsonList in results 
       { 
        //print(jsonList.1) 

        let list = List(json: jsonList.1, id: Int(jsonList.0)) 
        if (list.posterPath == "") 
        { 
         continue 
        } 
        else 
        { 
         //print(movies.posterPath) 
         allList.append(list) 
        } 

       } 
       wrapper.results = allList 
       return .success(wrapper) 
      case .failure(let error): 
       return .failure(error) 
      } 
     } 

     return response(responseSerializer: responseSerializer,completionHandler: completionHandler) 
    } 
} 

답변

1

브로 코드는 아래를 참조하십시오 :

func responseListArray(_ completionHandler: @escaping (Response<ListWrapper>) -> Void) -> Self { 
    let responseSerializer = ResponseSerializer<ListWrapper> { request, response, data, error in 

     guard error == nil else 
     { 
      return .failure(error!) 
     } 
     guard let responseData = data else { 
      return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) 

     } 

     let JSONResponseSerializer = Request.JSONResponseSerializer(options: .allowFragments) 
     let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error) 

     switch result { 
     case .success(let value): 
      let json = SwiftyJSON3.JSON(value) 
      let wrapper = ListWrapper() 

      var allList:Array = Array<List>() 

      wrapper.totalCount = json["favorite_count"].intValue 

      // print(json) 
      let results = json["items"] 
      // print(results) 
      for jsonList in results 
      { 
       //print(jsonList.1) 

       let list = List(json: jsonList.1, id: Int(jsonList.0)) 
       if (list.posterPath == "") 
       { 
        continue 
       } 
       else 
       { 
        //print(movies.posterPath) 
        allList.append(list) 
       } 

      } 
      wrapper.results = allList 
      return .success(wrapper) 
     case .failure(let error): 
      return .failure(error) 
     } 
    } 

    return response(responseSerializer: responseSerializer,completionHandler: completionHandler) 
} 
+0

를 내가 마지막 return 문에 오류가있어 "가 아닌 함수 타입의 값을 호출 할 수 없습니다 'NSHTTPURLResponse ? ' "? – Mat0

+0

확장 프로그램으로 변경 Alamofire.DataRequest? 같은 문제가 있습니까? –

+0

예, 이미 작동하지 않았습니다. Response & ResponseSerializer가 인식되지 않습니다. DataResponse 및 DataResponseSerializer도 변경하면 안됩니까? – Mat0

관련 문제