SWIFT 3步幅不能调用
问题描述:
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
初始化。