3

我升级到 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)

            }))

无法将类型“()-> Void”的值转换为预期的参数类型“((UIAlertAction)-> Void)?”

关于如何纠正这个问题以便至少在短期内能够编译我的代码的任何想法?

谢谢。

4

2 回答 2

5

处理程序的输入类型为 (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)
        }))
于 2017-04-24T13:51:50.520 回答
0

发布给您错误的整个代码块。听起来好像您正在尝试将闭包分配给变量,而不是该闭包的结果。

尝试在闭包表达式的末尾添加 (),这将导致编译器尝试评估闭包并使用它的返回值而不是闭包本身:

TextRow(){ row in
                row.title = "First Name"
                row.placeholder = "John"
                row.add(rule: RuleRequired())
            }()
于 2017-04-24T13:29:35.450 回答