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) в массиве или расширении словаря
  • Экспресс для быстрых циклов с динамическим диапазоном
  • Как инициализировать структуру из объекта json
  • Как преобразовать данные в шестнадцатеричную строку в swift
  • Как обеспечить локализованное описание с типом ошибки в Swift?
  • Каковы новые слова «for», «at», «in» в объявлениях Swift3?
  • swift Сделайте снимок и сохраните его в библиотеке фотографий
  • Параметры «var» устарели и будут удалены в Swift 3
  • Что случилось с конструктором UIView? () В Swift 3.0?
  • Alamofire Swift 3.0 Дополнительный аргумент в вызове
  • «Classname не имеет имени участника» при добавлении цели UIButton
  • Давайте будем гением компьютера.