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