Я не понимаю, как это компилируется и работает:
struct Person {
var age: Int
init(age: Int) {
self.age = age
// Another age?!
let age = age + 1
}
}
Как компилятор может увидеть разницу между этими тройными переменными с одинаковыми именами внутри одного блока?После того как я определил age
в последний раз, могу ли я по-прежнему обращаться к age
из списка параметров?
Закончится ли время жизни переменной параметра, когда другая переменная будет создана с тем же именем?Я не думаю, что в соответствии с этим небольшим тестом:
struct Person {
init(child: Child) {
print("copied another child reference")
var child: Child? = child
print("Emptying reference")
child = nil
print("Bye bye hasn't been called yet, but where is the last reference?")
}
}
class Child {
deinit {
print("bye bye")
}
}
// Somewhere call Person(child: Child())
"пока пока" называется последним оператором печати.Это означает, что он каким-то образом сохраняет ссылку, хотя я не вижу, как я все еще могу получить доступ к параметру дочернего объекта.