В сообщении об ошибке сообщается ответ:
Невозможно сформировать Range с upperBound
Это правило only , котороеимеет значение.
Как сформированный диапазон не имеет отношения к этому правилу.Не имеет значения, является ли оператор, который формирует диапазон, ...
или ..<
.Все, что имеет значение, это то, что, когда мы пытаемся подчиниться оператору и создавать экземпляр диапазона, должно получиться, что верхняя граница не меньше нижней границы.
Ну, в 1..<1
верхняя границане меньше нижней границы.Так что это допустимый диапазон.
Это также «пустой» диапазон;это contains
без целых чисел (ни 0, ни 1, ни 2, ни любое другое целое число).Но это все еще диапазон.
Теперь, если подумать, это очень ценная вещь.Это не выглядит ценным в вашем примере, потому что вы используете литералы.Но когда нижняя граница и верхняя граница происходят из переменных, очень хорошо, что lo..<hi
не падает в угловом случае, когда lo
и hi
оказываются равными!В этом случае возникает лот , и по уважительным причинам.
Например, рассмотрим циклический перебор элементов массива.Если массив пуст, его indices
равны (как вы уже догадались) 0..<0
.Вы хотите, чтобы Legal циклически проходил через этот массив.Ничего не происходит , но это не незаконно.И это только то, что говорит это правило.