我对Double
进行了以下简单扩展,在Xcode 8 beta 3之前的所有版本中都能正常工作
public extension Double {
public func roundTo(_ decimalPlaces: Int) -> Double {
var v = self
var divisor = 1.0
if decimalPlaces > 0 {
for _ in 1 ... decimalPlaces {
v *= 10.0
divisor *= 0.1
}
}
return round(v) * divisor
}
}
从Beta 4开始,我在返回的
round
函数上得到“不能在不可变值上使用变异成员:'自我'是不可变的”-有人知道吗? 最佳答案
这是由于与the new rounding functions协议FloatingPoint
和round()
上的rounded()
的命名冲突所致,这些协议已从Xcode 8 beta 4开始添加到Swift 3中。
因此,您需要通过指定要引用round()
模块中的全局Darwin
函数来消除歧义:
return Darwin.round(v) * divisor
或者,甚至更好的是,只需使用新的舍入函数并在
rounded()
上调用v
:return v.rounded() * divisor