Я провел быстрый тест, переименовав все как dogName1
, dogName2
, dogName3
и dogName4
. Затем я добавил код, чтобы попытаться изменить каждое имя на «Снупи».
№ 2 и № 3 не собирались, так как компилятор знал, что они оба доступны только для чтения. (# 2, несмотря на то, что он объявлен как var
, настроен на то, чтобы всегда возвращать «Чарли».
Закомментировав эти две строки, я установил две точки останова: после инициализации и одну после попытки обновления.
Наконец, я попытался сделать print
каждого из них.
Точка останова №1: #1 и #4 имеют значение "Чарли", #2 нет (поскольку он не инициализирован), а #3 отображается как инициализированный, но без значения (поскольку он еще не вызывался И да, ()
в конце инициализирует что-то в памяти.
Точка останова № 2: № 1 и № 4 были обновлены до «Snoopy».
Результаты print
: № 1 и № 4 — «Снупи», № 2 — «Чарли» и № 3 — «(Функция)».
Вывод. Нет никакой разницы между №1 и №4. Каждый из них объявлен var
и по умолчанию имеет значение «Чарли». # 2, доступен только для чтения из-за let
и всегда будет возвращать «Чарли». №3? Он создает экземпляр и не строится, если вы пытаетесь его изменить, но я не знаю, как его использовать.
Я обновлю этот ответ, если у кого-то есть что добавить о № 3.
person
dfd
schedule
12.07.2017