2016-09-15 3 views
2

Я переношу нашу кодовую базу в Swift 3, и я столкнулся с проблемой компиляции, которую я не могу объяснить или исправить.Swift 3 Migration - проблема с удлинением округления

У меня есть метод в Double расширении, округляет Double на определенное количество цифр:

public func roundToPlaces(places: Int) -> Double { 
    let divisor = pow(10.0, Double(places)) 
    return round(self * divisor)/divisor 
} 

Например: 12.34567.roundToPlaces(2) должен возвращать 12.35. Тем не менее, я получаю компиляцию для метода round, используемого в этом расширении. Говорят, что я Cannot use mutating member on immutable value: 'self' is immutable.

compilation error image

Любые идеи о том, что здесь происходит? Как исправить эту проблему?

+2

Возможный дубликат [Xcode 8 Beta 4 Swift 3 - поведение «round» изменено] (http://stackoverflow.com/questions/38767635/xcode-8-beta-4-swift-3-round-behaviour-changed) –

+0

Не следует округлять '12.34567' return' 12.35'? – Koen

+0

моя ошибка ... да, 12.35. редактирование сейчас ... – Jake

ответ

10

Я исправил проблему. Изменение round(self * divisor) на (self * divisor).rounded() разрешило проблему компиляции.

+2

Я должен был сделать: (self * divisor) .rounded() с круглыми скобками –

Смежные вопросы