我在Swift 2中使用了Alamofire。所以,我有参数:
self.presentViewController(thirtVC, animated: true) { () -> Void in
dispatch_after(0, dispatch_get_main_queue(), { () -> Void in
self.navigationController?.dismissViewControllerAnimated(false, completion: { () -> Void in
})
})
}
并通过以下方式发送请求:
let parameters = [
"fullname": fullName.text,
"username": username.text,
"email": email.text,
"password": password.text,
"country": country
]
但它会返回下一个错误Alamofire.request(Method.POST, "http://myapi.mysite.com/users", parameters: parameters)
.response { request, response, data, error in
parameters
我该如何解决?
答案 0 :(得分:1)
我相信你需要解压缩文本字段!自从转换为Swift 2以来,我发生了很多事情。可能值得一试
body {width:100%; height:100%; overflow:hidden, margin:0}
答案 1 :(得分:0)
词典中的值是可选类型。如果你用爆炸!
答案 2 :(得分:0)
如果我们仔细研究Alamofire,我们会发现方法请求如下:
public func request(
method: Method,
_ URLString: URLStringConvertible,
parameters: [String: AnyObject]? = nil,
encoding: ParameterEncoding = .URL,
headers: [String: String]? = nil)
-> Request
所以我们可以看到,parameters
属于[String : AnyObject]?
类型,它本身是可选的,但只是整个数组。里面的参数不能是可选的。您要添加到字典中的参数是可选的,因此需要打开它们。在Swift中使用安全结构是相当常见的,因此强制!
只是超越编译器并不是最聪明的选择。使用if-let来处理它:
if let fullname = fn.text, un = username.text, em = email.text, pwd = password.text {
let parameters = [
//...
]
} else {
// handle the situation - inform the user they forgot some fields
}
至于您的Cannot call value of non-function type 'NSHTTPURLResponse?'
问题:
问题出在Alamofire 2.0 migration,其中响应序列化已迅速改变,因此对于您的情况,请使用它:
Alamofire.request(.POST, "https://myapi.mysite.com/users", parameters: parameters)
.responseJSON { _, _, result in
print(result)
// mumbo jumbo
}