Xcode 8 Beta 4 Swift 3 - изменилось поведение "круглого"
У меня есть следующее простое расширение для 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, я получаю: "Нельзя использовать мутирующий элемент в неизменяемом значении:" self "неизменен" в функции round
в возврате - есть ли у кого какие-либо подсказки?
Ответы
Ответ 1
Это связано с конфликтом имен с новыми функциями округления в протоколе FloatingPoint
, round()
и rounded()
, которые были добавлены в Swift 3 с Xcode 8 beta 4.
Таким образом, вам также необходимо устранить ошибку, указав, что вы ссылаетесь на глобальную функцию round()
в модуле Darwin
:
return Darwin.round(v) * divisor
Или, что еще лучше, просто используйте новые функции округления и вызовите rounded()
на v
:
return v.rounded() * divisor