被Swift错误困惑 - 无法找到并超载' init'接受提供的参数

时间:2015-06-24 15:23:01

标签: swift closures

为什么会产生错误:

enter image description here

这并不是: enter image description here

如果重要,请点击下面的实时代码:

alertController.addAction(UIAlertAction(title: "Resend Verification Email",
        style: UIAlertActionStyle.Destructive,
        handler: {
            (alert: UIAlertAction!) in
            println("without this line there is a syntax error, why?")
            self._userVerificationService?.triggerEmailVerifiectionResentForUser(PFUser.currentUser())
    }))

2 个答案:

答案 0 :(得分:2)

这是我的猜测。你的函数triggerEmailVerifiectionResentForUser有一个返回值。 Swift中的单行闭包隐含了它们的一行的返回值,所以你的闭包返回了一些东西。

UIAlertAction的init需要一个返回Void的闭包。由于您的闭包隐式返回某些内容,因此它与返回Void的init的要求不匹配。

当闭包有一个额外的行时,它不再隐式地获取返回值,因此它会像你想要的那样返回Void,从而匹配UIAlertAction init的方法签名。

One-line closure without return type

答案 1 :(得分:0)

Verifiection

.triggerEmailVerifiectionResentForUser的拼写是否有拼写错误?

编辑: 好。所以不是这样。

这有用吗? :

alertController.addAction(UIAlertAction(title: "Resend Verification Email", style: .Destructive) { (action) in self._userVerificationService?.triggerEmailVerifiectionResentForUser(PFUser.currentUser()) })