2016-08-04 29 views
16

Xcode 8 Beta 4 itibariyle 3Xcode 8 Beta 4 Swift 3 - "yuvarlak" davranış

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 kadar her şeyde iyi çalıştı Double için aşağıdaki basit uzantısı, var, alıyorum değişti "Değişken değerde mutasyona uğrayan üye kullanılamıyor: dönüşte round işlevinde 'kendini' değiştiremez” - herhangi bir ipucu var mı?

cevap

31

Bu 4.

You nedenle ya Xcode 8 beta olarak Swift 3 eklenmiştir FloatingPoint protokolü the new rounding functions, round() ve rounded() ile adlandırma anlaşmazlığından dolayı sen misin belirterek belirsizliği gerekir Darwin modülünde küresel round() işlevine atıfta ediyorlar: daha iyi

return Darwin.round(v) * divisor 

Veya, sadece yeni yuvarlama fonksiyonları yararlanabilir ve v üzerine rounded() çağrı:

return v.rounded() * divisor