SALE ENDS TODAY: Save 50% on all Swift books and bundles! >>

Estructuras

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.

Funciones dentro de estructuras

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 Instabug helps you identify and resolve severe crashes quickly. You can retrace in-app events and know exactly which line of code caused the crash along with environment details, network logs, repro steps, and the session profiler. Ask more questions or keep users up-to-date with in-app replies straight from your dashboard. Instabug takes data privacy seriously, so no one sees your data but you! See more detailed features comparison and try Instabug's crash reporting SDK for free.

Save 50% on all books and bundles

The biggest ever Hacking with Swift sale is now on, letting you save 50% on all books and bundles. Learn something new with Swift and enjoy great savings while the sale lasts!

Click here to save 50% in our Black Friday sale!

BUY OUR BOOKS
Buy Pro Swift Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift (Vapor Edition) Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Server-Side Swift (Kitura Edition) Buy Beyond Code

Was this page useful? Let us know!