当我尝试以下代码时:
extension Int{
func hello(to end: Int, by step: Int, task: (Int) -> Void ){
for i in stride(from: 4, to: 8, by: 2) {
task(i)
}
}
}
我得到的错误是:
错误:无法使用类型为'(from:Int,to:Int,by:Int)的参数列表调用'stride',对于步长为i的i(from:4,to:8,by:2)
注意:这些部分匹配的参数列表存在'stride'的重载:( to:Self,by:Self.Stride),(through:Self,by:Self.Stride) 为了我的步伐(从:4,到:8,由:2)
我不知道为什么会发生这种错误
答案 0 :(得分:2)
这有点棘手! :)
Int
显然声明了自己的stride
方法(这就是编译器为什么会显示存在部分匹配的重载的原因),但不知何故我无法访问它们(编译器说它们被标记为不可用)。由于您位于Int
扩展名中,因此在此上下文中调用stride
等同于self.stride
。 stride
所拥有的Int
方法没有参数from:to:by:
,因此无法编译。
您希望专门引用全局的stride
方法。只需指定定义方法的模块,即Swift
:
extension Int{
func hello(to end: Int, by step: Int, task: (Int) -> Void ){
for i in Swift.stride(from: 4, to: 8, by: 2) {
task(i)
}
}
}