iOS Xcode Swift自动完成破坏了吗?

时间:2014-11-27 14:05:26

标签: ios xcode swift autocomplete

我还没有使用Swift那么多,但是来自Objective C,有一些关于Swift的东西是PITA让我的头脑。

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

所以我尝试使用Xcode的自动完成功能并开始输入:

UIView.animateWith

自动填充显示:

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

然后我选择了"持续时间"字段,然后键入数字:

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

然后我再次选中了动画块,然后按照目标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然后给我错误时:

  

无法调用“animateWithDuration”'使用类型的参数列表   '(FloatLiteralConvertible,动画:() - > Void)'

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

我注意到如果做一个简单的陈述,如:

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

它没有给我任何错误。

任何想法?

1 个答案:

答案 0 :(得分:6)

来自"Calling Methods Through Optional Chaining"

  

任何通过可选链接设置属性的尝试都会返回a   类型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
})

更新:添加明确的return语句,而不是必需的 再使用Swift 1.2(Xcode 6.3)。从测试版发布说明:

  

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