2016-08-04 49 views
16

我有以下的簡單擴展Double,這一切運行良好最多的Xcode 8的Beta 3的Xcode 8 Beta 4的斯威夫特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中,我得到「不能在不可變值上使用變異成員:'self'在返回中的round函數中是不可變的 - 有沒有人有任何線索?

回答

31

這是由於與the new rounding functionsFloatingPoint協議,round()rounded()命名衝突,已添加到斯威夫特3作爲Xcode的8測試版的4

因此你要麼需要通過指定你的歧義「再將此歸因於全球round()功能Darwin模塊:

return Darwin.round(v) * divisor 

,或者甚至更好,簡單地利用新的舍入函數和v呼籲rounded()

return v.rounded() * divisor