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, я получаю: «Нельзя использовать мутирующий элемент по неизменяемой ценности:« я »неизменен» на round функции в обратном – есть ли у кого какие-либо подсказки?

Это связано с конфликтом имен с новыми функциями округления в протоколе FloatingPoint , round() и rounded() , которые были добавлены в Swift 3 с Xcode 8 beta 4.

Поэтому вам нужно либо устранить двусмысленность, указав, что вы ссылаетесь на глобальную функцию round() в модуле Darwin :

 return Darwin.round(v) * divisor 

Или, что еще лучше, просто используйте новые функции округления и вызовите rounded() на v :

 return v.rounded() * divisor 
  • Swift 3.0: ошибка компилятора при вызове глобальной func min (T, T) в массиве или расширении словаря
  • Что такое ключевое слово open в Swift?
  • Триггерное уведомление еженедельно Swift 3
  • Каковы новые слова «for», «at», «in» в объявлениях Swift3?
  • Сохранить словарь в userdefaults в swift 3 с помощью xcode 8
  • Обновление закрытий для Swift 3 - @ escaping
  • Singleton со свойствами в Swift 3
  • Операторы «++» и «-» устарели Xcode 7.3
  • Правильно Разбор JSON в Swift 3
  • Первые имена параметров Swift 3
  • Swift 3 сохранение и извлечение пользовательского объекта из userDefaults
  • Давайте будем гением компьютера.