Я загрузил вчера последнюю версию Xcode 8.0 и, следовательно, Swift 3. Первое, что я сделал, это попытка обновить мой проект для Swift 3, и я чуть не заплакал. Одним из самых серьезных изменений является (по моему мнению) новое управление структурой Swifts Range, особенно потому, что автоматическое преобразование в текущий синтаксис Swift ничего не делает с диапазонами.
Range разделяется на Range, CountableRange, ClosedRange и CountableClosedRange, что имеет смысл при рассмотрении того, что теперь возможно при использовании диапазонов (хотя это в основном довольно ненужно).
Однако: у меня есть много функций, принимающих параметр Range<Int> или возвращающий Range<Int>. Проблема заключается в следующем: я назвал эти функции 0..<5 например или 0...4 (потому что он иногда семантически более экспрессивный). Конечно, я мог бы просто настроить такие вещи. Но почему не все эти типы диапазонов имеют общий интерфейс? Мне пришлось бы перегружать каждую функцию для каждого из этих типов диапазонов, и каждый раз они выполняли бы те же самые операции.
Есть ли еще какие-либо рекомендации по использованию диапазонов в Swift 3?