Las estructuras son un tipo de datos complejo, lo que significa que se componen de múltiples valores. Puedes crear una instancia de una estructura y rellenar sus valores, luego puedes pasarlos como un único valor en tu código. Por ejemplo, podemos definir una estructura Person
que contenga dos atributos: clothes
y shoes
:
struct Person {
var clothes: String
var shoes: String
}
Cuando defines una estructura, Swift hace muy simple su creación ya que genera automáticamente lo denominado constructor de miembros. De forma sencilla, significa que puedes crear la estructura pasando sus valores iniciales para los dos atributos, como aquí:
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
Una vez que has creado la instancia de la estructura, puedes leer sus propiedades solamente escribiendo el nombre de la estructura, un punto, y la propiedad que quieres leer:
print(taylor.clothes)
print(other.shoes)
Si asignas una estructura a otra, Swift hace una copia por detrás, lo que esto es un duplicado completo e independiente de la original. Bien, esto no es del todo cierto, Swift usa una técnica llamada "copia en escritura" que significa que únicamente copia tus datos si intentas cambiarlos.
Para ayudarte a ver como funciona la copia de estructuras, escribe esto en tu playground:
struct Person {
var clothes: String
var shoes: String
}
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
var taylorCopy = taylor
taylorCopy.shoes = "flip flops"
print(taylor)
print(taylorCopy)
Esto crea dos estructuras de tipo Person
, después crea una tercera llamada taylorCopy
como una copia de taylor
. Lo que pasa a continuación es lo interesante: el código cambia taylorCopy
, e imprime por pantalla ambos. Si miras en el panel de resultados (puede que tengas que ajustar el tamaño) verás que la copia tiene un valor diferente al original: cambiar uno no cambia el otro.
Puedes poner funciones dentro de estructuras, y es una buena idea hacerlo para todas las funciones que lean o cambien datos dentro de la estructura. Por ejemplo, podríamos añadir una función a nuestra estructura Persona
para describir lo que visten, como aquí:
struct Person {
var clothes: String
var shoes: String
func describe() {
print("I like wearing \(clothes) with \(shoes)")
}
}
Esta es una cosa más que debes saber pero que no puedes ver en el código: cuando escribes una función dentro de una estructura, se llama método. En Swift escribes func
independientemente de que sea una función o un método, pero esta distinción se reserva a cuando hablas de ella.
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.