是否可以在Swift中访问带阴影的顶级函数?

时间:2015-12-03 09:20:42

标签: swift

我试图编写一个Int扩展来将Int钳位到特定范围,如下所示:

extension Int {
  func clamp(left: Int, right: Int) -> Int {
    return min(max(self, left), right)
  }
}

我收到编译错误,过了一段时间后,我意识到min在这里被解释为Int.min,这是最低Int的常量。

我可以重新实现这一点,避免min / max,但我很好奇:有没有办法可以引用Int扩展名中的内容?

2 个答案:

答案 0 :(得分:7)

您可以添加模块名称,在本例中为Swift

extension Int {
    func clamp(left: Int, right: Int) -> Int {
        return Swift.min(Swift.max(self, left), right)
    }
}

只是为了好玩:用

得到相同的结果
extension Int {
    func clamp(left: Int, right: Int) -> Int {
        return (left ... right).clamp(self ... self).start
    }
}

使用clamp()中的ClosedInterval方法。

答案 1 :(得分:0)

您可以创建一个调用myMin<T>(a: T, b: T)的函数min,并在您的扩展程序中使用它。