2014-10-01 98 views
0

在CGAffineTransformMakeTranslation中放置变量后,XCode会向我显示“调用中的额外参数”延迟“。 任何想法为什么?认为它是一个错误。呼叫中的额外参数“延迟”

 var direction = 0 
     UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.Repeat, animations: { 
      self.NameInput.transform = CGAffineTransformMakeTranslation(5*direction, 0); 
      }, completion: nil) 
+0

这里面有一个animateTransition函数吗?如果是这样,你可以发布整个功能吗?也是动画的描述。 – 2014-10-01 19:45:55

+0

如果删除var方向,错误消失? – Vinzzz 2014-10-01 19:59:17

回答

6

问题是Swift编译器有错误的错误信息。真的,非常糟糕的错误消息。

这里的修复:

var direction = 0 
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.Repeat, animations: { 
    self.NameInput.transform = CGAffineTransformMakeTranslation(5*CGFloat(direction), 0) 
    //               ^^^^^^^^  ^
    }, completion: nil) 

编译器不能编译,因为类型不正确的animations块。所以它不知道块的类型。它替换了块的错误类型。然后它试图找到一个将该错误类型作为参数的重载。没有一个,所以它任意选择一个过载。具体而言,它选择了animateWithDuration(_,animations:)超载,该参数不包含delay参数。因此,您收到的错误消息。

+0

+1为了很好的解释,虽然在风格上我认为疯狂-36的解决方案('var direction:CGFloat = 0')是最好的。 – 2014-10-01 20:18:40

0

这里的问题在于Int和CGFloat类型。您正在将整数值与一些未定义的CGFloat值相乘。所以,如果你确定持续时间是CGFloat类型,你的问题将会消失。

var direction: CGFloat = 0 
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.Repeat, animations: {() -> Void in 
    self.NameInput.transform = CGAffineTransformMakeTranslation(5 * direction, 0); 

}, completion: nil)