iOS Xcode Swift自动完成破?

我还没有使用过很多Swift,但是来自Objective C,关于Swift的一些东西是PITA来解决我的问题。

在iOS编程中,我们有animateWithDuration:方法,这是UIView的一部分。

所以我试图使用Xcode的自动完成,并开始input:

 UIView.animateWith 

自动完成显示:

 UIView.animateWithDuration(duration: NSTimeInterval, animations: () -> Void) 

然后我选中“duration”字段,然后键入一个数字:

 UIView.animateWithDuration(0.5, animations: () -> Void) 

然后我再次select了animation块,然后像在Objective C中通常那样按下回车,Xcode现在显示:

 UIView.animateWithDuration(0.5, animations: { () -> Void in code }) 

所以然后我最后一次用标签代替我的代码:

 UIView.animateWithDuration(0.5, animations: { () -> Void in self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0); }) 

这是Xcode然后给我的错误:

无法使用types为“(FloatLiteralConvertible,animations:() – > Void)”的参数列表调用“animateWithDuration”

我不明白。 这是Xcode为我生成的自动完成代码,为什么它给我一个错误?

我注意到,如果做一个简单的声明,如:

 UIView.animateWithDuration(0.5, animations: { () -> Void in var num = 1 + 1; }) 

它不给我任何错误。

任何想法的人?

从“通过可选链接调用方法” :

任何尝试通过可选的链接来设置属性都会返回一个types为Void?的值Void? ,它使您能够比较零,看看是否成功地设置了属性…

因此expression式的types

 self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0) 

Void? (可选Void)。 如果一个闭包只包含一个expression式 ,那么这个expression式将被自动作为返回值 。 错误信息是相当具有误导性的,但是它来自Void?的事实Void?Void不同。

添加一个显式的return语句解决了这个问题:

 UIView.animateWithDuration(0.5, animations: { () -> Void in self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0) return }) 

更新:使用Swift 1.2(Xcode 6.3)添加一个显式的return语句。 从testing版本说明:

现在可以在Void上下文中使用带有非Void返回types的未注释的单expression式闭包。