繁体   English   中英

iOS Xcode Swift自动完成功能坏了吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM