AlamoFire + ObjectMapper,如何使用一个函数来获取类型为Mappable的参数?

时间:2016-06-09 01:58:45

标签: ios swift alamofire objectmapper

我目前有一个功能:

  func getJSONDataDictionary (accessToken: String, response: Mappable, url: String) {

    let headers = [
      "Cache-Control": "no-cache",
      "Authorization": "bearer \(accessToken)"
    ]

    Alamofire.request(.GET, url, encoding: .JSON, headers: headers)
      .responseObject{  (response: Response<response, NSError>) in

       let JSONDict = response.result.value

    }
  }

我想在响应参数中传入一个类型为Mappable的类(用于识别类是否符合ObjectMapper协议的类)。使用代码的方式现在我得到一个错误“响应不是一种类型”。我能对函数做些什么,所以它需要一个Mappable参数吗?

3 个答案:

答案 0 :(得分:0)

错误消息指出您的参数结果不是类型,它不是。 Mappable 协议

我建议你让你的函数变得通用,如下所示:

    func getJSONDataDictionary< T: Mappable>(accessToken: String, response: T, url: String) {

    let headers = [
      "Cache-Control": "no-cache",
      "Authorization": "bearer \(accessToken)"
    ]

    Alamofire.request(.GET, url, encoding: .JSON, headers: headers)
      .responseObject{  (response: Response<response, NSError>) in

       let JSONDict = response.result.value

    }
  }

泛型类型 T 将被约束为 Mappable 协议。

答案 1 :(得分:0)

你可以这样做:

    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = HTTPMethod.post.rawValue
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

    let pjson = attendences.toJSONString(prettyPrint: false)
    let data = (pjson?.data(using: .utf8))! as Data

    request.httpBody = data

    Alamofire.request(request).responseJSON { (response) in


        print(response)

    }

答案 2 :(得分:0)

let query_url = Constant.BASE_URL + Constant.ENDPOINT
      var urlRequest = URLRequest(url: URL(string: query_url)!)

      urlRequest.httpMethod = HTTPMethod.get.rawValue
      urlRequest.addValue("Cache-Control", forHTTPHeaderField: "no-cache"")

      urlRequest.addValue("Authorization", forHTTPHeaderField:"bearer \(accessToken)")

      let req = Alamofire.request(urlRequest)
      req.responseObject{ (response: DataResponse<Model>) in
                let value = response.result.value
                print(value?.data?.count)  
            }