SWIFT:错误EXC_BAD_INSTRUCTION

运行我的应用程序并尝试注册用户后出现以下错误:

线程1:EXC_BAD_INSTRUCTION(code = EXC_l386_INVOP,s子代码= 0x0)

这出现在代码的末尾:

作为! (Data ?, URLResponse ?,错误?) – > Void)

let myUrl = NSURL(string: "http://127.0.0.1/MySQL_PHP/userRegister.php") var request = URLRequest(url: myUrl as! URL) request.httpMethod = "POST" // let config = URLSessionConfiguration.default let session = URLSession.shared let postString = "email=\(userEmail)&passwort=\(userPasswort)&vorname=\(userVorname)&nachname=\(userName)&benutzer=\(userBenutzer)" request.httpBody = postString.data(using: String.Encoding.utf8) let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in if error != nil { print("error=\(error)") return } var err: NSError? var json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary if let parseJSON = json { var resultValue = parseJSON["status"] as? String print("result: \(resultValue)") var isUserRegistered: Bool = false if (resultValue == "Success") { isUserRegistered = true } var messageToDisplay: String = parseJSON["message"] as! String! if (!isUserRegistered){ messageToDisplay = parseJSON["message"] as! String! } DispatchQueue.main.async(execute: { var myAlert = UIAlertController(title:"Alert", message: messageToDisplay, preferredStyle: UIAlertControllerStyle.alert) let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default){ action in self.dismiss(animated: true, completion: nil) } myAlert.addAction(okAction) self.present(myAlert, animated: true, completion: nil) }) } } as! (Data?, URLResponse?, Error?) -> Void ) task.resume() 

错误是误导。 这与数据任务closures没有直接关系。

首先不要投

 let task = session.dataTask(with: request, completionHandler: { (data, response, error) in ... }) 

甚至更短的使用尾随闭包语法:

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

发生错误是因为do - catch块在try JSONSerialization丢失了

错误消失或者通过添加do - catch块或使用try!

最后一个build议:请,请不要在Swift中使用NSArray / NSDictionary 。 你正在打强壮型的体系。