2015-09-01 3 views
1

Swift вопрос с целью понимания языка лучше:перераспределить Swift Пусть переменная

Я понимаю разницу между var и let

var изменчивы

let являются окончательными

I Предполагая, что оба они записаны в стек. После создания переменной устанавливается класс объекта, который он хранит. Можно ли все это изменить?

let myVar = String("Hello") 
// myVar.dynamicType is String 
myVar.delete 

let myVar = Int(123) 
myVar.dynamicType is Int 

Есть ли способ перераспределить память для переменной? Я хочу использовать одно и то же имя переменной для обозначения другой вещи в другом разделе кода.

+4

Пожалуйста, откажитесь от этой идеи! Плохой дизайн на всех языках –

+0

Это кажется очень подозрительным. В худшем случае используйте локальные области с помощью 'do {...}' или используйте какой-либо тип объединения. –

ответ

1

Идентификаторы в Swift (как постоянные и изменяемые), как и в большинстве других статических языков программирования типа проверены, имеют объем (см Wikipedia entry), который определяет степень их достоверности. Область может быть телом функции, файла, модуля или всего тела цикла for. На языке, подобном Swift, вы не можете повторно использовать один и тот же идентификатор для двух разных значений или ячеек памяти внутри одной области, но вы можете сделать это в двух разных областях. Итак, ответ на ваш вопрос: вы не можете сделать это в том же объеме, но можете сделать это в разных областях. Обратите внимание, однако, что вы не используете ту же память, то же самое имя связано с другой частью памяти (в случае var) или другим значением (в случае let).

На самом деле вы не можете присвоить значение, связанное с идентификатором, ни самой памятью (как кажется, по вашему мнению, возможно в вашем примере). Это невозможно на любом языке, на котором выделены стеки, поскольку восстановление из стека происходит автоматически в конце текущего блока кода.

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