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.
BUILD THE ULTIMATE PORTFOLIO APP Most Swift tutorials help you solve one specific problem, but in my Ultimate Portfolio App series I show you how to get all the best practices into a single app: architecture, testing, performance, accessibility, localization, project organization, and so much more, all while building a SwiftUI app that works on iOS, macOS and watchOS.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.