Взгляните на следующий фрагмент кода
struct Person{
var name: String
let surname: String
var closure: (()->())?
init(name: String, surname: String){
self.name = name
self.surname = surname
}
}
var person = Person(name: "John", surname: "Lennon")
let cl = {
print(person.name)
}
person.name = "Bill"
cl()
print(person.name)
вывод приведенного выше фрагмента
Bill
Bill
Может кто-нибудь объяснить, как это происходит? Я думал, что, поскольку замыкание является ссылочным типом, а Person
является типом значения, то при создании замыкания оно получает свою собственную копию Person
(поскольку типы значений копируются при проходе), поэтому изменение внешнего Person
не должно влиять на Person
, которое захвачено закрытие, но кажется, что это не работает таким образом. Я новичок в типах swift и value, поэтому, пожалуйста, не судите слишком строго мой вопрос.
Спасибо
P.S. Я знаю, что мы можем захватить переменную значения явно, используя список захвата, и в этом случае изменение внешней переменной не влияет на захваченную переменную. Вопрос не в этом. Вопрос о том, что я думал, что он должен быть таким же, даже без явного захвата