Swift中的callback函数语法

我试图传递一个函数到另一个函数,然后让传递的函数传递给它一个variables。

这是我的代码:

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) } 

我得到的错误是

 callback?(field.text!) 

错误是“无法将'String'的值types转换为期望的参数types'()'。我知道这是一个语法问题 – 只是不知道应该是什么。

罗布的答案是正确的,但我想分享一个简单的工作callback/完成处理程序的示例,您可以下载一个示例项目,并试验getBoolValue的input。

下载示例项目

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

重要的是要了解:

 (String)->() // takes a String returns void ()->(String) // takes void returns a String 

你已经声明callback没有任何参数,然后你试图传递一个参数。

你指定了types(()->(String))? ,这是一个可选的函数,不带任何参数并返回一个String

也许你的意思是指定((String)->())? ,这是一个可选的函数,它接受一个String并且不返回任何东西

showStandardPrompt的参数中,您声明callback具有type ()->(String) ,这是一个不带参数并返回String的函数。

然后你用field.text!调用它field.text! 作为一个参数,这显然与以前给定的types相冲突。

您需要更正给callback的types以接受一个String参数并且不返回任何内容:

 (String)->() 

尝试下面的代码更新为斯威夫特3

 func getBoolValue(number : Int, completion: (Bool)->()) { if number > 5 { completion(true) } else { completion(false) } } getBoolValue(number : 8, completion:{ result in print(result) })