Swift 3.1: 无法转换 '(_) -> ()' 类型的值错误/闭包问题
Swift 3.1: Cannot convert value of type '(_) -> ()' error / Problems with closures
我升级到 Swift 3.1,我收到一些新错误,似乎是 3.1 语法问题,因为它们在迁移之前不是问题。它们大多与闭包有关,如本例所示:
let alert = UIAlertController(title: "Success", message: "Thanks for participating in our raffle!", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: {
performSegue(withIdentifier: "to_root", sender: self)
}))
Cannot convert value of type '() -> Void' to expected argument type '((UIAlertAction) -> Void)?'
关于如何更正此问题以至少在短期内编译我的代码的任何想法?
谢谢。
Post 给您错误的整个代码块。听起来好像您正在尝试将闭包分配给变量而不是该闭包的结果。
尝试在闭包表达式的末尾添加 (),这会导致编译器尝试评估闭包并使用它的 return 值而不是闭包本身:
TextRow(){ row in
row.title = "First Name"
row.placeholder = "John"
row.add(rule: RuleRequired())
}()
您的处理程序的输入是 (UIAlertAction) 类型,因此只需将以下行添加到您的代码中。
handler: {
action in
完整的解决方案
let alertVC = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
alertVC.addAction(UIAlertAction(title: "Ok", style: .default, handler: {
action in
self.performSegue(withIdentifier: "go", sender: self)
}))
我升级到 Swift 3.1,我收到一些新错误,似乎是 3.1 语法问题,因为它们在迁移之前不是问题。它们大多与闭包有关,如本例所示:
let alert = UIAlertController(title: "Success", message: "Thanks for participating in our raffle!", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: {
performSegue(withIdentifier: "to_root", sender: self)
}))
Cannot convert value of type '() -> Void' to expected argument type '((UIAlertAction) -> Void)?'
关于如何更正此问题以至少在短期内编译我的代码的任何想法?
谢谢。
Post 给您错误的整个代码块。听起来好像您正在尝试将闭包分配给变量而不是该闭包的结果。
尝试在闭包表达式的末尾添加 (),这会导致编译器尝试评估闭包并使用它的 return 值而不是闭包本身:
TextRow(){ row in
row.title = "First Name"
row.placeholder = "John"
row.add(rule: RuleRequired())
}()
您的处理程序的输入是 (UIAlertAction) 类型,因此只需将以下行添加到您的代码中。
handler: {
action in
完整的解决方案
let alertVC = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
alertVC.addAction(UIAlertAction(title: "Ok", style: .default, handler: {
action in
self.performSegue(withIdentifier: "go", sender: self)
}))