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,值传递给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初始化。