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 una
widthpropiedad yheightpropiedad, ambas deDoubletipo. - Un camino dentro de un rango, encapsula una
startpropiedad ylengthpropiedad, ambas deInttipo. - Un punto en un sistema de coordenadas tridimensional, encapsula
x,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