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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With