Swift 3.1错误:无法使用

时间:2017-06-06 17:01:45

标签: swift3

  

当我尝试以下代码时:

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)

我不知道为什么会发生这种错误

1 个答案:

答案 0 :(得分:2)

这有点棘手! :)

Int显然声明了自己的stride方法(这就是编译器为什么会显示存在部分匹配的重载的原因),但不知何故我无法访问它们(编译器说它们被标记为不可用)。由于您位于Int扩展名中,因此在此上下文中调用stride等同于self.stridestride所拥有的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)
         }
     }
}