我对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协议FloatingPointround()上的rounded()的命名冲突所致,这些协议已从Xcode 8 beta 4开始添加到Swift 3中。

因此,您需要通过指定要引用round()模块中的全局Darwin函数来消除歧义:

return Darwin.round(v) * divisor


或者,甚至更好的是,只需使用新的舍入函数并在rounded()上调用v

return v.rounded() * divisor

10-08 15:41