我有一些奇怪的事情:尝试跟踪在使用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?
答案 0 :(得分:0)
为了解决问题,从我之前的评论中,Swift将尝试使用单个语句从闭包中推断返回类型。如果您尝试使用具有返回值的单个语句定义闭包,则Swift将假定该闭包的返回值。
由于您注意到logEvent返回一个值,因此您需要显式返回任何内容,以创建正确的闭包。
对于它的价值,这似乎在6.3中被更改/修复,现在执行以下代码:
func foo() -> Int {
return 1
}
func bar(() -> ()) {
println("Hello from bar")
}
bar({ foo() })
一般来说,调试这种模糊错误的方法是将语句分成多行,在每个阶段明确定义预期类型,并观察它在哪里中断。