[英]iOS Xcode Swift autocomplete broken?
我使用Swift的方式不是很多,但是来自Objective C,关于Swift的一些事情就是PITA。
在iOS编程中,我们有animateWithDuration:
方法,它是UIView的一部分。
因此,我尝试使用Xcode的自动完成功能并开始输入:
UIView.animateWith
自动完成显示:
UIView.animateWithDuration(duration: NSTimeInterval, animations: () -> Void)
然后,我进入“持续时间”字段,然后输入数字:
UIView.animateWithDuration(0.5, animations: () -> Void)
然后,我再次跳到动画块,然后按Enter键,就像我通常在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然后给我错误的时候:
无法使用类型为'(FloatLiteralConvertible,animations:()-> Void)'的参数列表调用'animateWithDuration'
我不明白 那就是Xcode为我生成的自动完成代码,为什么会给我一个错误?
我注意到是否做了一个简单的声明,例如:
UIView.animateWithDuration(0.5, animations: { () -> Void in
var num = 1 + 1;
})
它不会给我任何错误。
有任何想法吗?
任何通过可选链接设置属性的尝试都会返回
Void?
类型的值Void?
,使您可以与nil进行比较以查看是否成功设置了属性...
因此表达式的类型
self.customView?.transform = CGAffineTransformMakeTranslation(0.0, 0.0)
是Void?
(可选的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
语句。 从测试版发行说明中:
现在可以在Void上下文中使用具有非Void返回类型的带注释的单表达式闭包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.