2016-09-19 28 views
2

我具有與所述ResponseSerializer煩我得到一個未解決的標識符和用於響應我得到未聲明的類型。我已經從 alamofire migration doc讀取了Response已被更改爲多種類型。所以,我應該改變響應 - > DataReponse但這意味着我只能傳遞一個參數,如:Alamofire 3-> 4效應初探&ResponseSerializer夫特3.0

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

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

我怎麼還收到錯誤這樣的,更重要的是我如何遷移擴展alamofire 4?

我的類:

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