English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
As estruturas Swift são uma construção genérica e flexível usada para construir código.
Podemos definir atributos (constantes, variáveis) e adicionar métodos para estruturas, expandindo suas funcionalidades.
Diferente de C e Objective-C:
As estruturas não precisam conter arquivos de implementação e interfaces.
As estruturas permitem que criemos um único arquivo e o sistema gere automaticamente interfaces externas para outro código.
As estruturas são sempre passadas por cópia no código, portanto, seu valor não pode ser modificado.
Definimos a estrutura através da palavra-chave struct:
struct nameStruct { Definição 1 Definição 2 …… Definição N }
Definimos uma estrutura chamada MarkStruct, cujos atributos são as notas de três disciplinas do aluno, do 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)
O resultado da execução do programa acima é:
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
O resultado da execução do programa acima é:
98 97
在你的代码中,你可以使用结构体来定义你的自定义数据类型。
结构体示例总是通过值传递来定义你的自定义数据类型。
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
结构体的主要目的是用来封装少量相关简单数据值。
有理由预计一个结构体示例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
结构体不需要去继承另一个已存在类型的属性或者行为。
举例来说,以下情境中适合使用结构体:
几何形状的大小,封装一个width
属性和height
属性,两者均为Double
类型。
一定范围内的路径,封装一个start
属性和length
属性,两者均为Int
类型。
三维坐标系内一点,封装x
,y
和z
属性,三者均为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("Obter a pontuação alta:") var marks = markStruct(mark1: 98, mark2: 96, mark3:100) print(marks.mark1) print(marks.mark2) print(marks.mark3) print("Obter a pontuação baixa:") var fail = markStruct(mark1: 34, mark2: 42, mark3: 13) print(fail.mark1) print(fail.mark2) print(fail.mark3)
O resultado da execução do programa acima é:
Obter a pontuação alta: 98 96 100 Obter a pontuação baixa: 34 42 13
Nos exemplos acima, definimos a estrutura markStruct,três atributos de membro: mark1, mark2 e mark3A estrutura usa a palavra-chave self para os atributos de membro.
Podemos entender muito bem, a partir do exemplo, que o exemplo de estrutura de estrutura é passado por valor.