Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Callback function syntax in Swift

I am attempting pass a function to another function and then have the passed function executed passing to it a variable.

Here is my code:

func showStandardPrompt(prompt:String,view: UIViewController,numberInput: Bool, callback: (()->(String))?) {     let alert = UIAlertController(title: "Input Data", message: prompt, preferredStyle: .Alert)     alert.addTextFieldWithConfigurationHandler { (textField) in         if numberInput {             textField.keyboardType = .NumberPad         }     }      let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in         let field = alert.textFields![0] as UITextField         callback?(field.text!)     }      alert.addAction(OKAction)     let CancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)     alert.addAction(CancelAction)     view.presentViewController(alert,animated: true, completion: nil) } 

The error I get is in

callback?(field.text!) 

The error is "Cannot convert value type of 'String' to expected argument type '()'. I know it's a matter of syntax - just don't know what it should be.

like image 981
Floyd Resler Avatar asked Oct 22 '15 20:10

Floyd Resler


1 Answers

Rob's answer is correct, though I'd like to share an example of a simple working callback / completion handler, you can download an example project below and experiment with the getBoolValue's input.

Swift 5:

func getBoolValue(number : Int, completion: (Bool)->()) {     if number > 5 {         completion(true)     } else {         completion(false)     } }  getBoolValue(number: 2) { (result) -> () in     // do stuff with the result     print(result) } 

Important to understand:

(String)->() // takes a String returns void ()->(String) // takes void returns a String 
like image 180
Dan Beaulieu Avatar answered Oct 11 '22 08:10

Dan Beaulieu