Swift - Estruturas
O Swift 4 fornece um bloco de construção flexível para fazer uso de construções como estruturas. Ao fazer uso dessas estruturas, uma vez podemos definir métodos e propriedades de construções.
Ao contrário de C e Objective C
A estrutura não precisa de arquivos e interface de implementação.
A estrutura nos permite criar um único arquivo e estender sua interface automaticamente a outros blocos.
Em Estrutura, os valores das variáveis são copiados e passados em códigos subsequentes, retornando uma cópia dos valores antigos para que os valores não possam ser alterados.
Sintaxe
Structures are defined with a 'Struct' Keyword.
struct nameStruct {
Definition 1
Definition 2
---
Definition N
}
Definição de uma Estrutura
Considere, por exemplo, suponha que tenhamos que acessar o registro dos alunos contendo notas de três disciplinas e descobrir o total de três disciplinas. Aqui, markStruct é usado para inicializar uma estrutura com três marcas como tipo de dados 'Int'.
struct MarkStruct {
var mark1: Int
var mark2: Int
var mark3: Int
}
Acessando a Estrutura e suas Propriedades
Os membros da estrutura são acessados por seu nome de estrutura. As instâncias da estrutura são inicializadas pela palavra-chave 'let'.
struct studentMarks {
var mark1 = 100
var mark2 = 200
var mark3 = 300
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
Mark1 is 100
Mark2 is 200
Mark3 is 300
As marcas dos alunos são acessadas pelo nome da estrutura 'studentMarks'. Os membros da estrutura são inicializados como mark1, mark2, mark3 com valores de tipo inteiro. Então a estrutura studentMarks () é passada para as 'marcas' com a palavra-chave 'let'. Doravante, 'marcas' conterá os valores dos membros da estrutura. Agora os valores são impressos acessando os valores dos membros da estrutura por '.' com seus nomes inicializados.
struct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct and bStruct are two structs with the same value!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
98
97
Melhores práticas de uso de estruturas
A linguagem Swift 4 fornece a funcionalidade para definir estruturas como tipos de dados personalizados para construir os blocos de função. As instâncias de estrutura são passadas por seu valor para os blocos definidos para futuras manipulações.
Necessidade de ter estruturas
Para encapsular valores de dados simples.
Para copiar os dados encapsulados e suas propriedades associadas por 'valores' em vez de por 'referências'.
Estrutura para 'Copiar' e 'Referência'.
As estruturas no Swift 4 passam seus membros com seus valores e não por suas referências.
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
}
}
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
98
96
100
Outro exemplo
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
}
}
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)
Quando executamos o programa acima usando playground, obtemos o seguinte resultado -
34
42
13
A estrutura 'markStruct' é definida primeiro com seus membros mark1, mark2 e mark3. Agora as variáveis das classes membro são inicializadas para conter valores inteiros. Em seguida, a cópia dos membros da estrutura é criada com a palavra-chave 'self'. Uma vez criada a cópia dos membros da estrutura, o bloco de estrutura com suas marcas de parâmetro é passado para a variável 'marcas' que agora conterá as marcas dos alunos. Em seguida, as marcas são impressas como 98, 96, 100. Próxima etapa para os mesmos membros da estrutura, outra instância chamada 'falha' é usada para apontar os mesmos membros da estrutura com marcas diferentes. Em seguida, os resultados agora são impressos como 34, 42, 13. Isso explica claramente que as estruturas terão uma cópia das variáveis de membro e então passarão os membros para seus próximos blocos de função.