2015-05-25 3 views
2

Я пытаюсь понять, почему в Свифте действует следующее. Я предполагаю, что это связано с тем, как все происходит в Swift.Быстрое необязательное связывание с константами и областью

let name = "test" //assigns "test" to name 
var optionalName: String? = "John Appleseed" 
var greeting = "Hello!" 
if let name = optionalName { //assigns "John Appleseed" to name 
    let name = "no error" //assigns "no error" to name 
    greeting = "Hello, \(name)" //assigns "Hello, no error" to greeting 
} 
println(name) //prints "test" 

Я считаю, что это создает 3 отдельных константы имен в разных областях. Первый пусть имя находится в глобальной области. Тогда необязательная привязка let name - это еще одна область, а затем внутри if, если имя let - другая область. Затем окончательный отпечаток возвращается к глобальному охвату.

+3

Ваше понимание правильное, просто перефразируйте последнее предложение, чтобы прочитать «Тогда окончательный println использует единственное имя в той же области действия, которая является первой,« как вы ее назвали, глобальная область действия » – ericosg

ответ

0

Вы уже поняли :) Он использует первую переменную, которую он находит с таким именем, начиная с внутренней области и поднимаясь вверх.

Смежные вопросы