Xcode 8 Beta 4 Swift 3 - "round"行为已更改

17

我有如下对 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函数中遇到了“无法在不可变值上使用突变成员:'self'是不可变的”的问题-有人有什么线索吗?

1个回答

36
这是因为在Swift 3中的Xcode 8 beta 4版本中,新的浮点数舍入函数 round()rounded()FloatingPoint协议发生了命名冲突。因此,您需要通过指定使用Darwin模块中的全局round()函数来消除歧义。
return Darwin.round(v) * divisor

或者更好的方法是,直接使用新的四舍五入函数,在 v 上调用 rounded():

return v.rounded() * divisor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接