English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Estructuras de Swift

Las estructuras de Swift son una construcción general y flexible que se utiliza para construir código.

Podemos definir propiedades (constantes, variables) y agregar métodos a las estructuras para expandir sus funcionalidades.

A diferencia de C y Objective C:

  • Las estructuras no necesitan contener archivos de implementación ni interfaces.

  • Las estructuras nos permiten crear un único archivo y el sistema generará automáticamente una interfaz externa para otro código.

Las estructuras se transmiten siempre de manera copiada en el código, por lo que su valor no es modificable.

Sintaxis

Definimos una estructura mediante la palabra clave struct:

struct nombreStruct { 
   Definición 1
   Definición 2
   ……
   Definición N
}

Ejemplo en línea

Definimos una estructura llamada MarkStruct, cuyos atributos son las puntuaciones de tres asignaturas del estudiante, del tipo Int:

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

我们可以通过结构体名来访问结构体成员。

结构体示例化使用 let 关键字:

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)

El resultado de la ejecución del programa anterior es:

Mark1 是 100
Mark2 是 78
Mark3 是 98

示例中,我们通过结构体名 'studentMarks' 访问学生的成绩。结构体成员初始化为mark1, mark2, mark3,数据类型为整型。

然后我们通过使用 let 关键字将结构体 studentMarks() 示例化并传递给 marks。

最后我们就通过 . 号来访问结构体成员的值。

以下示例化通过结构体示例化时传值并克隆一个结构体:

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

El resultado de la ejecución del programa anterior es:

98
97

结构体应用

在你的代码中,你可以使用结构体来定义你的自定义数据类型。

结构体示例总是通过值传递来定义你的自定义数据类型。

按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

  • 结构体的主要目的是用来封装少量相关简单数据值。

  • 有理由预计一个结构体示例在赋值或传递时,封装的数据将会被拷贝而不是被引用。

  • 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。

  • 结构体不需要去继承另一个已存在类型的属性或者行为。

举例来说,以下情境中适合使用结构体:

  • 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。

  • 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。

  • 三维坐标系内一点,封装xyz属性,三者均为Double类型。

结构体示例是通过值传递而不是通过引用传递。

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("Obtener la puntuación alta:")
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)
print("Obtener la puntuación baja:")
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)

El resultado de la ejecución del programa anterior es:

Obtener la puntuación alta:
98
96
100
Obtener la puntuación baja:
34
42
13

En el ejemplo anterior, definimos la estructura  markStruct, tres propiedades miembro: mark1, mark2 y mark3En el interior de la estructura, se utilizan las propiedades de los miembros con la palabra clave self.

Podemos entender muy bien a partir de los ejemplos que los ejemplos de estructuras se pasan por valor.