【问题标题】:Is it possible to access a shadowed top level function in Swift?是否可以在 Swift 中访问隐藏的顶级函数?
【发布时间】:2015-12-03 17:42:24
【问题描述】:

我试图编写一个 Int 扩展来将 Int 限制在特定范围内,如下所示:

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

我遇到了编译器错误,过了一会儿我意识到 min 在这里被解释为 Int.min,这是最低 Int 的常量。

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

【问题讨论】:

    标签: swift


    【解决方案1】:

    您可以在模块名称前面加上 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
        }
    }
    

    使用来自ClosedIntervalclamp() 方法。

    【讨论】:

    • 谢谢。 Swift. 正是我想要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多