我升级到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)?'
关于如何纠正这个问题的任何想法至少在短期内能够编译我的代码?
感谢。
答案 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())
}()