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
функции в обратном – есть ли у кого какие-либо подсказки?
- Обновление закрытий для Swift 3 - @ escaping
- Как отправить dispatch_sync, dispatch_async, dispatch_after и т. Д. В Swift 3, Swift 4 и дальше?
- Держите окно всегда сверху?
- Shuffle array swift 3
- Опциональный параметр закрытия с быстрой скоростью 3
- попробуйте, попробуйте! & пытаться? какая разница, и когда использовать их?
- Куда dispatch_once в Swift 3?
- Добавьте водяной знак в видео после объединения видео и аудио активов в один из Swift3 iOS
- Что является хорошим примером для различения fileprivate и private в Swift3
- Сохранить словарь в userdefaults в swift 3 с помощью xcode 8
- Доступ к коду в Swift 3 Error
- CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero недоступен в Swift
- Xcode 8 / Swift 3: простой код UIPicker не работает
Это связано с конфликтом имен с новыми функциями округления в протоколе FloatingPoint
, round()
и rounded()
, которые были добавлены в Swift 3 с Xcode 8 beta 4.
Поэтому вам нужно либо устранить двусмысленность, указав, что вы ссылаетесь на глобальную функцию round()
в модуле Darwin
:
return Darwin.round(v) * divisor
Или, что еще лучше, просто используйте новые функции округления и вызовите rounded()
на v
:
return v.rounded() * divisor