2014-07-17 35 views
5

1)我使用一個變量作爲第一個參數在UIView.animateWithDuration像這樣缺少參數:斯威夫特:對於參數

var theDelay: Float = 1.0 
    UIView.animateWithDuration(theDelay, animations: { 
    cell.frame.origin.y = 0 
}) 

和Xcode6(測試版3)給我一個生成錯誤:「缺少論據參數'通話延遲'。

當我不使用變量時,該函數工作得很好。當我發現這個問題時,我想調整這個變量(因爲這個代碼在一個循環中)。

2)可替換地,我可以跳過使用可變和包括在行計算:

UIView.animateWithDuration(indexPath.row * 1.0, animations: { 
    cell.frame.origin.y = 0 
}) 

但我正在逐漸「呼叫‘相同的錯誤’缺少對參數變量」延遲。

我在這裏做錯了什麼?

回答

9

錯誤消息是誤導性的。 animateWithDuration() 的第一個參數的類型爲NSTimeInterval(這是一個Double),但您傳遞的參數爲Float。 Swift不會隱式轉換類型。

改變變量定義

let theDelay = 1.0 

或顯式轉換

UIView.animateWithDuration(NSTimeInterval(indexPath.row), animations: { 
    cell.frame.origin.y = 0 
}) 

應該解決的問題。

斯威夫特3這將是

let theDelay = TimeInterval(indexPath.row) 
UIView.animate(withDuration: theDelay, animations: { 
    cell.frame.origin.y = 0 
}) 
+0

我在XCode 6 Beta 5的代碼的新部分中再次出現此錯誤。有或沒有明確的Double或NSTimeInterval參數。 – jaime

+0

嗯。我通過在構建階段中將UIKit明確添加到庫列表來修復它。 – jaime

+0

好的,它可能是我將CGFloat分配給NSLayoutConstraint而不是NSLayoutConstraint.constant的動畫塊。所以,如果你有這個問題,你可能會遇到另一個問題,那就是swift沒有直接告訴你。一旦我解決了這個問題,這個錯誤就消失了,代碼就運行了。 – jaime

1

其實斯威夫特類型語言,它需要通過同一類型的參數定義 有一個在迅速無隱式轉換。

由於animateWithDuration在decleration

class func animateWithDuration(duration: NSTimeInterval, animations: (() -> Void)!) // delay = 0.0, options = 0, completion = NULL 

有被聲明爲doubleNSTimeInterval參數類型,如果你看到它的聲明

typealias NSTimeInterval = Double 

所以需要Double參數值不Float值。 當你在你的代碼中調用第二個時間比swift使用的是類型相互作用時,即它會自動定義(不將float轉換爲double)indexPath.row * 1.0Double。下面的代碼工作正常。

var theDelay: NSTimeInterval = 1.0 

var theDelay: Double = 1.0 //this is same as above 
UIView.animateWithDuration(theDelay, animations: { 
    cell.frame.origin.y = 0 
}) 

編譯器是誤導你。所以總是通過與Swift中定義的相同的參數類型

3

我也從動畫塊中完全不相關的錯誤中得到了這個錯誤;我已經通過了有效的NSTimeInterval。它與delay參數無關,所以它向我顯示的錯誤是錯誤的,並讓我繞圈了一會兒。

因此,請確保您在動畫塊內沒有任何錯誤。

UIView.animateWithDuration(interval, animations: {() -> Void in // compiler will complain about this line missing a parameter 
      // some code 
      // some code with a syntax error in it, but Xcode won't show the error 
      // some code 
     }) 
+0

好,我有同樣的問題。需要將代碼移出動畫塊以使編譯器顯示實際問題。他媽的! – fish