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))
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))
爲了使您的stride
語句產生Double
,值傳遞給from
,through
和by
必須是Double
s。
在第一種情況下,夫特推斷文字0
和11
是Double
小號因爲1.0
是Double
那就是它們可以匹配的唯一途徑。這是可行的,因爲Double
符合ExpressibleByIntegerLiteral
協議,這隻意味着您可以用整數字面值初始化Double
,如果需要可以推斷爲整數字面值爲Double
。
在第二種情況下,您已將11
指定爲s
,Swift指定s
類型Int
。因此,當您嘗試在stride
語句中使用它時,類型不匹配。
您可以通過多種方式解決這個問題:
s
是一個Double
與var s: Double = 11
。在這種情況下,您已明確指定s
的類型,因此Swift使用ExpressibleByIntegerLiteral
符合Double
來初始化s
。11
是Double
與var s = 11 as Double
。在這裏你告訴斯威夫特11
是Double
這是因爲Double
符合ExpressibleByIntegerLiteral
。 Swift然後推斷s
的類型也爲Double
。11
轉換成Double
與var s = Double(11)
。這使用一個Double
的初始值設定項,它以Int
作爲輸入。 Swift然後根據分配給它的值推斷s
的類型爲Double
。s
與Double(s)
一起使用。在這裏,您明確使用Double
初始值設定項來創建Double
和Int
s
。s
與Double
文字與var s = 11.0
。在這裏,Swift推斷字面11.0
爲Double
類型,然後推斷s
的類型也爲Double
,因爲它由Double
初始化。