Почему переопределение "необязательного связывания" не создает ошибку?

Я делаю это на Playground, но я не получаю никаких ошибок. Я не воссоздаю константу range? Это происходит в двух разных областях? Что происходит в фоновом режиме, что делает это не ошибкой?

if let range = add1.rangeOfString(", ") {
    print(add1.substringToIndex(range.startIndex))
    print (range)
}

if let range = add1.rangeOfString(", ") {
    print(add1.substringToIndex(range.startIndex))
    print (range)
}

Ответ 1

Переменные, введенные с необязательным связыванием if-let, являются локальными после let -clause до конца блока кода истинного кода.

Итак, да. Ваши два range находятся в двух разных областях.

(guard-let - это еще одна вещь.)