我试图编写一个Int扩展来将Int钳位到特定范围,如下所示:
extension Int {
func clamp(left: Int, right: Int) -> Int {
return min(max(self, left), right)
}
}
我收到编译错误,过了一段时间后,我意识到min
在这里被解释为Int.min
,这是最低Int
的常量。
我可以重新实现这一点,避免min
/ max
,但我很好奇:有没有办法可以引用Int
扩展名中的内容?
答案 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
,并在您的扩展程序中使用它。