2016-08-04 23 views
16

mam następujący prosty rozszerzenie Double, który pracował dobrze we wszystkim do Xcode 8 beta 3Xcode 8 Beta 4 Swift 3 - "okrągłe" zachowanie zmieniło

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 
    } 
} 

Jak Beta 4, jestem coraz "Nie można użyć mutującego elementu na niezmiennej wartości:" self "jest niezmienne" na funkcji round w powrocie - czy ktoś ma jakieś wskazówki?

Odpowiedz

31

Wynika to nazywania konflikcie z the new rounding functions na protokole FloatingPoint, round() i rounded(), które zostały dodane do Swift 3, z Xcode 8 Beta 4.

You więc albo trzeba disambiguate określając to ty „re odnosząc się do globalnego round() funkcji w module Darwin:

return Darwin.round(v) * divisor 

albo jeszcze lepiej, po prostu skorzystać z nowych funkcji zaokrąglania i nazywają rounded() na v:

return v.rounded() * divisor 
Powiązane problemy