从类型...的投掷函数到非投掷函数类型的转换无效

时间:2016-12-12 04:09:52

标签: ios swift3

此代码继续在URLSession实例化附近给出错误处理消息。我对swift3的帮助感到困惑。

 let myUrl = NSURL(string: "http://myURL.com/user")
            let request = NSMutableURLRequest(url: myUrl! as URL)
            request.httpMethod = "POST"

            let postString = "email=\(userEmail)&password=\(userPassword)&username=\(userUsername)"
            request.httpBody = postString.data(using: String.Encoding.utf8)


            let task = URLSession.shared.dataTask(with: request as URLRequest)
            {

                (data: Data!, response: URLResponse!, error: Error!) in

                if error != nil
                {
                    print("error=\(error)")
                    return
                }

                var err: NSError?
                do {
                    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary


                    if let parseJSON = json {
                        var resultValue:String = parseJSON["status"] as! String;
                        print("result: \(resultValue)");

我得到的错误是:

  

投掷函数类型'(Data?,URLResponse?,错误?)的无效转换抛出 - >()'到非投掷函数类型

2 个答案:

答案 0 :(得分:0)

我认为错误意味着以下内容。

默认情况下,函数可以抛出,这就是它为返回值使用选项的原因。每当函数抛出时,可选值将为nil。但是,您使用感叹号运算符删除可选的nil值。

您应该了解如何正确处理Swift中的异常。然后,您应该能够清理代码并使其正常工作。

答案 1 :(得分:0)

该错误具有误导性。只要省略类型注释,它们弊大于利。

使用不带NS前缀的原生结构:

let myUrl = URL(string: "http://myURL.com/user")!
var request = URLRequest(url: myUrl)
request.httpMethod = "POST"

let postString = "email=\(userEmail)&password=\(userPassword)&username=\(userUsername)"
request.httpBody = postString.data(using: .utf8)


let task = URLSession.shared.dataTask(with: request) { (data, response, error) in ...