我试图编写一个Int扩展名以将Int限制在特定范围内,如下所示:
extension Int { func clamp(left: Int, right: Int) -> Int { return min(max(self, left), right) } }
我遇到了编译器错误,过了一会儿我才意识到这min在这里被解释为Int.min,这是最低的常量Int。
min
Int.min
Int
我可以重新实现,以避免min/,max但是我很好奇:有没有办法可以从Int扩展中引用那些?
max
您可以在前面加上模块名称Swift:
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。
clamp()
ClosedInterval