2014-10-01 169 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)