Alamofire自定义参数编码

时间:2015-08-06 16:06:13

标签: swift encoding alamofire nsmutableurlrequest

我正在使用Alamofire并希望使用内容类型“text / html; charset = utf-8”对我的参数进行编码。我按照文档https://github.com/Alamofire/Alamofire进行自定义参数编码并创建了

let custom: (URLRequestConvertible, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) = {
    (URLRequest, parameters) in
    let mutableURLRequest = URLRequest.URLRequest.mutableCopy() as! NSMutableURLRequest
    mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
    mutableURLRequest.body =  // don't know if I need to set this
    return (mutableURLRequest, nil)
}

func postData(){
    Alamofire.request(.POST, baseUrl, parameters: parameters, encoding: .Custom(custom))
        .responseString{ (request, response, data, error) in
    println("blah")
    }
}

当我尝试在我的Alamofire请求中使用自定义并且得到错误“无法使用类型的参数列表(_,_,_,_) - > _时生成responseString”时出现问题“但是,这不是'如果编码更改为.URL之类的预设问题,那么问题似乎出现在我的自定义实现中?

如果它有所不同,我的参数设置在这里:

var parameters = [String: AnyObject]()
func setParams(){
        parameters = [
        "CONTRACT ID" : chosenContract!.iD.toInt()!,
        "FEE AMOUNT" : 0,
        "TRANSACT DATE" : today
    ]
}

1 个答案:

答案 0 :(得分:1)

你在这里有几个问题。让我们将它们分解为1x1。

编译器问题

您的编译器问题是由于您的返回元组是错误的类型。在Alamofire 1.3.0中,我们将返回类型更改为NSMutableURLRequest,最终使整体事情变得更加容易。这应该可以解决您的编译问题。

设置HTTPBody

现在你有几个选择。

选项1 - 将数据编码为JSON

let options = NSJSONWritingOptions()
let data = try NSJSONSerialization.dataWithJSONObject(parameters!, options: options)

mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.HTTPBody = data
  

根据您发布的内容,我假设您确实需要.URL编码参数。

选项2 - 使用.URL案例

let parameters: [String: AnyObject] = [:] // fill in
let encodableURLRequest = NSURLRequest(URL: URL)
let encodedURLRequest = ParameterEncoding.URL.encode(encodableURLRequest, parameters).0

let mutableURLRequest = NSMutableURLRequest(URL: encodedURLRequest.URLString)
mutableURLRequest.HTTPMethod = "POST"
mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")

Alamofire.request(mutableURLRequest)
         .response { request, response, data, error in
             print(request)
             print(response)
             print(error)
         }

希望这有助于您前进。祝你好运!