Swift Struct

La estructura de Swift es una construcción genérica y flexible que se utiliza para construir código.

Podemos definir propiedades (constantes, variables) y agregar métodos a la estructura, extendiendo así su funcionalidad.

A diferencia de C y Objective-C:

  • La estructura no necesita contener archivos de implementación e interfaces.

  • La estructura nos permite crear un único archivo, y el sistema genera automáticamente una interfaz externa orientada a otro código.

Una estructura siempre se pasa en el código mediante copia, por lo tanto, su valor no se puede modificar.

Sintaxis

Definimos una estructura mediante la palabra clave `struct`:

struct nameStruct { 
   Definition 1
   Definition 2
   ……
   Definition N
}

Ejemplo

Definimos una estructura llamada MarkStruct. Los atributos de la estructura son las calificaciones de tres asignaturas del estudiante, con tipo de datos Int.

struct MarkStruct{
   var mark1: Int
   var mark2: Int
   var mark3: Int
}

Podemos acceder a los miembros de la estructura a través del nombre de la estructura.

La instanciación de una estructura utiliza laletpalabra clave:

import Cocoa

struct studentMarks {
   var mark1 = 100
   var mark2 = 78
   var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")

La salida del programa anterior es:

Mark1 是 100
Mark2 是 78
Mark3 是 98

En el ejemplo, accedemos a las calificaciones del estudiante a través del nombre de la estructura 'studentMarks'. Los miembros de la estructura se inicializan como mark1, mark2, mark3, con tipo de datos entero.

Luego usamos laletpalabra clave para instanciar la estructura studentMarks() y pasarla a marks.

Finalmente, a través del.símbolo accedemos a los valores de los miembros de la estructura.

La siguiente instanciación pasa valores al instanciar la estructura y clona una estructura:

import Cocoa

struct MarksStruct {
   var mark: Int

   init(mark: Int) {
      self.mark = mark
   }
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97

La salida del programa anterior es:

98
97

Aplicación de la estructura

En tu código, puedes usar estructuras para definir tus propios tipos de datos personalizados.

Las instancias de estructura siempre se pasan por valor para definir tus tipos de datos personalizados.

Según las pautas generales, cuando se cumpla una o más de las siguientes condiciones, considera construir una estructura:

  • El propósito principal de la estructura es encapsular una pequeña cantidad de valores de datos simples y relacionados.
  • Es razonable esperar que, al asignar o pasar una instancia de estructura, los datos encapsulados se copien en lugar de referenciarse.
  • Cualquier propiedad de tipo valor almacenada en la estructura también se copiará, en lugar de referenciarse.
  • La estructura no necesita heredar propiedades o comportamientos de otro tipo existente.

Por ejemplo, las siguientes situaciones son adecuadas para usar estructuras:

  • El tamaño de una forma geométrica, encapsula unawidthpropiedad yheightpropiedad, ambas deDoubletipo.
  • Un camino dentro de un rango, encapsula unastartpropiedad ylengthpropiedad, ambas deInttipo.
  • Un punto en un sistema de coordenadas tridimensional, encapsulax,yyzpropiedades, las tres deDoubletipo.

Las instancias de estructura se pasan por valor, no por referencia.

import Cocoa

struct markStruct{
    var mark1: Int
    var mark2: Int
    var mark3: Int
    
    init(mark1: Int, mark2: Int, mark3: Int){
        self.mark1 = mark1
        self.mark2 = mark2
        self.mark3 = mark3
    }
}

print("优异成绩:")
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)

print("糟糕成绩:")
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)

La salida del programa anterior es:

优异成绩:
98
96
100
糟糕成绩:
34
42
13

En el ejemplo anterior, definimos la estructura markStruct, con tres propiedades miembro: mark1, mark2 y mark3. Dentro de la estructura, las propiedades miembro utilizan la palabra clave self.

Del ejemplo podemos entender claramente que las instancias de estructura se pasan por valor.

Otras extensiones