Swift, Strings e endereços de memória

Há algo que não estou entendendo sobre como o Swift gerencia o endereço de memória deString(s)

1. Tipos de referência

Aquifoo eboo são 2 ponteiros para omesma localização de memória.

class Foo { }

let foo = Foo()
let boo = foo

unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)" 

Boa.

2. Tipos de valor
let word0 = "hello"
let word1 = word0

Agoraword0 eword1 estãovalue types mas aqui ocopy on write mecanismo está envolvido.

[...] No entanto, Swift só executa uma cópia real nos bastidores quando é absolutamente necessário fazê-lo. O Swift gerencia toda a cópia de valor para garantir o desempenho ideal, e você não deve evitar a atribuição para tentar antecipar essa otimização.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134

Então, por que eles têm 2 endereços de memória diferentes?

unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
mais 3

Observe também queString é umstruct estede alguma forma paraAnyObject.

Testado com o Xcode 7 GM Playground e o Swift 2.0.

questionAnswers(2)

yourAnswerToTheQuestion