Swift - 警报动作处理程序错误

时间:2015-02-20 19:47:39

标签: ios swift handler alert flurry

我有一些奇怪的事情:尝试跟踪在使用FLurry Analytics SDK的UIAlertAction处理程序中是否取消了共享操作。代码基本上应该是这样的:

       let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: {
            (action:UIAlertAction!) -> Void in
            Flurry.logEvent("Share Cancelled")
            }
        )

但编译器显示错误"额外参数"标题"在电话中......"并突出显示"取消"红色的。 虽然如果我添加任何变量声明或像println()这样的简单函数比没有错误!即此代码编译正确并被认为有效:

       let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: {
            (action:UIAlertAction!) -> Void in
            let somevar = 0
            Flurry.logEvent("Share Cancelled")
            }
        )

有人遇到过类似的事吗?也许它是一个Swift或Flurry bug?

1 个答案:

答案 0 :(得分:0)

为了解决问题,从我之前的评论中,Swift将尝试使用单个语句从闭包中推断返回类型。如果您尝试使用具有返回值的单个语句定义闭包,则Swift将假定该闭包的返回值。

由于您注意到logEvent返回一个值,因此您需要显式返回任何内容,以创建正确的闭包。

对于它的价值,这似乎在6.3中被更改/修复,现在执行以下代码:

func foo() -> Int {
    return 1
}

func bar(() -> ()) {
    println("Hello from bar")
}

bar({ foo() })

一般来说,调试这种模糊错误的方法是将语句分成多行,在每个阶段明确定义预期类型,并观察它在哪里中断。