Xcode 8 Beta 4 Swift 3 - "圆形"行为发生了变化

Gri*_*mxn 17 swift3

我有以下简单的扩展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
    }
}
Run Code Online (Sandbox Code Playgroud)

从Beta 4开始,我得到"不能在变量值上使用变异成员:'self'是不可变的"在round返回函数中 - 有没有人有任何线索?

Ham*_*ish 36

这是由于与协议上的新舍入函数的命名冲突FloatingPoint,round()并且rounded()从Xcode 8 beta 4开始已添加到Swift 3中.

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

return Darwin.round(v) * divisor
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好,简单地利用新的舍入函数和调用rounded()v:

return v.rounded() * divisor
Run Code Online (Sandbox Code Playgroud)