Alamofire String与AnyObject错误不同

时间:2015-09-14 12:46:56

标签: ios swift swift2 alamofire

我在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

我该如何解决?

3 个答案:

答案 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
}