Swift 3.1:无法转换类型'(_) - >的值()'错误/关闭问题

时间:2017-04-24 13:20:50

标签: ios swift swift3.1

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

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

感谢。

2 个答案:

答案 0 :(得分: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)
        }))

答案 1 :(得分:0)

发布导致错误的整个代码块。听起来好像是在尝试为变量分配闭包而不是闭包的结果。

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

TextRow(){ row in
                row.title = "First Name"
                row.placeholder = "John"
                row.add(rule: RuleRequired())
            }()