2017-05-08 51 views
1
var arr: [Double] = Array(stride(from: 0, through: 11, by: 1.0)) 

此代碼是好的, 但如果我寫這篇文章,「不能援引」問題似乎SWIFT 3步幅不能調用

var s = 11 
var arr: [Double] = Array(stride(from: 0, through: s, by: 1.0)) 

回答

2

爲了使您的stride語句產生Double,值傳遞給fromthroughby必須是Double s。

在第一種情況下,夫特推斷文字011Double小號因爲1.0Double那就是它們可以匹配的唯一途徑。這是可行的,因爲Double符合ExpressibleByIntegerLiteral協議,這隻意味着您可以用整數字面值初始化Double,如果需要可以推斷爲整數字面值爲Double

在第二種情況下,您已將11指定爲s,Swift指定s類型Int。因此,當您嘗試在stride語句中使用它時,類型不匹配。

您可以通過多種方式解決這個問題:

  1. 聲明s是一個Doublevar s: Double = 11。在這種情況下,您已明確指定s的類型,因此Swift使用ExpressibleByIntegerLiteral符合Double來初始化s
  2. 聲明11Doublevar s = 11 as Double。在這裏你告訴斯威夫特11Double這是因爲Double符合ExpressibleByIntegerLiteral。 Swift然後推斷s的類型也爲Double
  3. 11轉換成Doublevar s = Double(11)。這使用一個Double的初始值設定項,它以Int作爲輸入。 Swift然後根據分配給它的值推斷s的類型爲Double
  4. 轉換sDouble(s)一起使用。在這裏,您明確使用Double初始值設定項來創建DoubleInts
  5. 聲明sDouble文字與var s = 11.0。在這裏,Swift推斷字面11.0Double類型,然後推斷s的類型也爲Double,因爲它由Double初始化。