Tipos de valor estructural en Swift

Entiendo la diferencia entre 'Tipos de valor' y 'Tipos de reference'. Sé que 'Estructuras' son 'Tipos de valor' y de acuerdo con la documentation de Swift, todos los valores almacenados por la estructura son en sí mismos types de valor. Ahora mi pregunta es qué si tengo una propiedad almacenada en un Struct que es una instancia de una class. En ese caso, ¿se copyría toda la class o simplemente su dirección?

Cualquier ayuda sería apreciada.

Copia el puntero a la instancia. Acabo de probar esto en un patio de recreo.

struct MyStruct { var instance: MyClass } class MyClass { var name: String init(name: String) { self.name = name println("inited \( self.name )") // Prints "inited Alex" only once } } var foo = MyClass(name: "Alex") // make just one instance var a = MyStruct(instance: foo) // make a struct that contains that instance var b = a // copy the struct that references the instance foo.name = "Wayne" // Update the instance // Check to see if instance was updated everywhere. a.instance.name // Wayne b.instance.name // Wayne 

Sin embargo, lo que es diferente es que ahora son dos references diferentes al mismo object. Entonces, si cambia una estructura a una instancia diferente, solo la cuelga para esa estructura.

 b.instance = MyClass(name: "Vik") // a and b no longer reference the same instance a.instance.name // Wayne b.instance.name // Vik 

El patio de juegos es una excelente forma de probar preguntas como estas. No sabía la respuesta definitivamente cuando leí esta pregunta. Pero ahora lo hago 🙂

Entonces no tengas miedo de ir a jugar.

Creo que lees mal la documentation. De acuerdo con el lenguaje de progtwigción Swift,

Todas las estructuras y enumeraciones son types de valor en Swift. Esto significa que cualquier instancia de estructura y enumeración que cree, y cualquier tipo de valor que tengan como properties, siempre se copyn cuando se pasan por su código.

Dado que las classs son types de reference, no types de valores, no se copyn incluso si son properties de un tipo de valor, por lo que solo se copy la dirección.