swift 3步无法调用
swift 3 stride cannot invoke
var arr: [Double] = Array(stride(from: 0, through: 11, by: 1.0))
这段代码没问题,
但是如果我写这个,"cannot invoke" 问题就会出现
var s = 11
var arr: [Double] = Array(stride(from: 0, through: s, by: 1.0))
为了使您的 stride
语句产生 Double
,传递给 from
、through
和 by
的值必须是 Double
s.
在第一种情况下,Swift 将文字 0
和 11
推断为 Double
s,因为 1.0
是 Double
这是他们匹配的唯一方式。这是有效的,因为 Double
符合 ExpressibleByIntegerLiteral
协议,这意味着您可以用整数文字初始化 Double
并且整数文字可以推断为 Double
如果必要的。
在第二种情况下,您已将 11
分配给 s
,并且 Swift 将类型 s
分配给 Int
。因此,当您尝试在 stride
语句中使用它时,类型不匹配。
您可以通过多种方式解决此问题:
- 声明
s
是 Double
和 var s: Double = 11
。在这种情况下,您已经明确分配了 s
的类型,因此 Swift 使用 Double
的 ExpressibleByIntegerLiteral
一致性来初始化 s
.
- 声明
11
是 Double
和 var s = 11 as Double
。在这里你已经告诉 Swift 11
是一个 Double
,因为 Double
符合 ExpressibleByIntegerLiteral
。 Swift 然后推断出 s
的类型也是 Double
.
- 使用
var s = Double(11)
将 11
转换为 Double
。这使用 Double
的初始值设定项,将 Int
作为输入。 Swift 然后根据分配给它的值推断 s
的类型为 Double
。
- 与
Double(s)
一起使用时转换s
。在这里,您显式地使用 Double
初始值设定项来创建 Double
和 Int
s
.
- 用
Double
文字和 var s = 11.0
声明 s
。在这里,Swift 将文字 11.0
推断为 Double
类型,然后将 s
的类型推断为 Double
,因为它由 a 初始化Double
.
var arr: [Double] = Array(stride(from: 0, through: 11, by: 1.0))
这段代码没问题, 但是如果我写这个,"cannot invoke" 问题就会出现
var s = 11
var arr: [Double] = Array(stride(from: 0, through: s, by: 1.0))
为了使您的 stride
语句产生 Double
,传递给 from
、through
和 by
的值必须是 Double
s.
在第一种情况下,Swift 将文字 0
和 11
推断为 Double
s,因为 1.0
是 Double
这是他们匹配的唯一方式。这是有效的,因为 Double
符合 ExpressibleByIntegerLiteral
协议,这意味着您可以用整数文字初始化 Double
并且整数文字可以推断为 Double
如果必要的。
在第二种情况下,您已将 11
分配给 s
,并且 Swift 将类型 s
分配给 Int
。因此,当您尝试在 stride
语句中使用它时,类型不匹配。
您可以通过多种方式解决此问题:
- 声明
s
是Double
和var s: Double = 11
。在这种情况下,您已经明确分配了s
的类型,因此 Swift 使用Double
的ExpressibleByIntegerLiteral
一致性来初始化s
. - 声明
11
是Double
和var s = 11 as Double
。在这里你已经告诉 Swift11
是一个Double
,因为Double
符合ExpressibleByIntegerLiteral
。 Swift 然后推断出s
的类型也是Double
. - 使用
var s = Double(11)
将11
转换为Double
。这使用Double
的初始值设定项,将Int
作为输入。 Swift 然后根据分配给它的值推断s
的类型为Double
。 - 与
Double(s)
一起使用时转换s
。在这里,您显式地使用Double
初始值设定项来创建Double
和Int
s
. - 用
Double
文字和var s = 11.0
声明s
。在这里,Swift 将文字11.0
推断为Double
类型,然后将s
的类型推断为Double
,因为它由 a 初始化Double
.