Можно ли изменить строку в Swift, чтобы можно было доказать, что она изменила исходное значение?

Начните с утверждения, что Swift делает строки «изменяемыми», действительно ли изменяемые строки Swift изменяемы или они такие же, как строки Java?, но исходя из общепринятого (и не-Swift) определения изменчивости, т.е. строго ценить неизменность, без учета привязок

Можно ли на самом деле изменить строковое значение так, чтобы оно печатало «истина»?

var str = "Mutate me!"

let a1 = (unsafeAddressOf(str))
// some 'mutating operation'
let a2 = (unsafeAddressOf(str))

print(a1 == a2)

Меня не интересуют "структурные типы" или семантика отложенного копирования. Этот вопрос касается того, можно ли изменить строковое значение изнутри Swift, хотя было бы также интересно посмотреть, можно ли это изменить другими... окольными способами. (Если нет, то глупо даже обсуждать значение и ссылочные типы вместо чисто соображений изменчивости.)

Мне известны методы "мутации"< /em>, но не согласен с тем, что они "мутируют" строковое значение. В приведенном выше примере let должен быть заменен в окончательной программе. Если let нельзя заменить; или иначе нельзя доказать, что объект является одним и тем же, тогда изменчивость не была показана.


person user2864740    schedule 17.09.2015    source источник
comment
@ЭрикД. Да, я прочитал это. Я пытаюсь «отчаянно» опровергнуть свое мнение о том, что документация Swift в лучшем случае представляет собой запутанную смесь терминов, и, надеюсь, так или иначе, будет может лучше аргументировать (или признать) изменчивость строк, независимую от того, является типом значения или имеет особую семантику копирования.   -  person user2864740    schedule 17.09.2015
comment
Обратите внимание, что unsafeAddressOf() принимает параметр AnyObject, то есть экземпляр класса, а String — это структура. Итак, вы получаете не адрес структуры, а (unsafeAddressOf(str as NSString)) из-за автоматического моста. Я думаю, что вы можете получить настоящий адрес с помощью withUnsafePointer(&str) { print($0) }, и это не изменится при мутации строки.   -  person Martin R    schedule 17.09.2015
comment
@MartinR Хорошее замечание по поводу unsafeAddressOf (подробнее об этом говорилось в stackoverflow.com/questions/32638879/) и .. волшебство, которое он делает.   -  person user2864740    schedule 17.09.2015