Swift 被快速错误所困扰-无法找到和重载';初始';它接受提供的参数

Swift 被快速错误所困扰-无法找到和重载';初始';它接受提供的参数,swift,closures,Swift,Closures,为什么会产生错误: 但这并不是: 如果有必要,请使用下面的实时代码: alertController.addAction(UIAlertAction(title: "Resend Verification Email", style: UIAlertActionStyle.Destructive, handler: { (alert: UIAlertAction!) in println("without thi

为什么会产生错误:

但这并不是:

如果有必要,请使用下面的实时代码:

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

中的
Verification
的拼写是否可能有拼写错误。TriggerMailVerificationRecentForUser

编辑: 好啊所以不是这样

这行吗

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

这是我的猜测。您的函数TriggerMailVerificationRecentForUser有一个返回值。Swift中的单行闭包隐式地获取其单行的返回值,因此您的闭包正在返回某些内容

UIAlertAction的init需要返回Void的闭包。由于闭包隐式返回某些内容,因此它不符合init返回Void的要求

当闭包有一个额外的行时,它不再隐式地接受返回值,因此它会像您希望的那样返回Void,从而匹配UIAlertAction init的方法签名


使用代码标签而不是图像将代码作为文本发布。作为图像发布以演示错误。好的,也将代码作为代码发布。我没有看到任何明显的内容,但很难从代码的图片中分辨出来。斯威夫特的错误信息有时真的很奇怪。试着把你的代码分成小块。在它自己的行上创建操作,然后添加它。你能为TriggerMailVerificationRecentForUserNo发布方法签名吗?我只是拼错了函数名。注意,上面的println()可以正常工作。事实上,该行之前的任何代码行都可以工作。我猜这是XCode有问题。我已经更新了我的答案,提供了一个替代建议。是的,我正在使用return在我的闭包中打破控制流。就是这样!