I'm trying to add a throws
to my existing function with a completion handler but I keep getting a warning saying no calls throwing functions occur within try expression
. In the section where I throw the errors, I get an error saying
invalid conversion from throwing function of type '() throwing -> Void' to non-throwing function type.
enum LoginError: ErrorType { case Invalid_Credentials case Unable_To_Access_Login case User_Not_Found } @IBAction func loginPressed(sender: AnyObject) { do{ try self.login3(dict, completion: { (result) -> Void in if (result == true) { self.performSegueWithIdentifier("loginSegue", sender: nil) } }) } catch LoginError.User_Not_Found { //deal with it } catch LoginError.Unable_To_Access_Login { //deal with it } catch LoginError.Invalid_Credentials { //deal with it } catch { print("i dunno") } } func login3(params:[String: String], completion: (result:Bool) throws -> Void) { //Request set up let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in do { let json = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves) as? NSDictionary if let parseJSON = json { let userID = parseJSON["user_id"] as? Int let loginError = parseJSON["user_not_found"] as? String let validationError = parseJSON["invalid_credentials"] as? String let exception = parseJSON["unable_to_access_login"] as? String var responseArray = [(parseJSON["user_id"] as? Int)] if userID != nil { dispatch_async(dispatch_get_main_queue()) { completion(result:true) } } else if loginError != "" { dispatch_async(dispatch_get_main_queue()){ completion(result: false) self.loginErrorLabel.text = loginError throw LoginError.User_Not_Found } } else if validationError != "" { dispatch_async(dispatch_get_main_queue()){ completion(result:false) self.validationErrorLabel.text = validationError throw LoginError.Invalid_Credentials } } else if exception != nil { dispatch_async(dispatch_get_main_queue()){ completion(result:false) self.exceptionErrorLabel.text = "Unable to login" throw LoginError.Unable_To_Access_Login } } } else { } } catch let parseError { // Log the error thrown by `JSONObjectWithData` }) task.resume() }