Estou aprendendo Swift e lendo The Swift Programming Language
da Apple, não tenho experiência com Objective C (apenas PHP, JS e outros, mas sem Obj C)
Na página 24-25, vejo este código:
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
Esta parte NÃO é especificada no livro e não consigo entender para que servem.
Alguém pode me explicar o que são get e set ?
Respostas:
Na verdade, isso é explicado logo antes do código:
Quando alguma outra classe deseja obter essa variável de perímetro, eles fazem o seguinte:
... O que chama isso de:
E, portanto, é essencialmente como se o controlador de chamada fizesse isso:
Quando você define a variável de outro objeto, ela se parece com isto:
Que invoca o código no
set{}
bloco:E então é como se a classe que está definindo a variável tivesse feito isso:
É realmente apenas por conveniência - você pode chamar isso de outro código sem ter que dividir ou multiplicar por 3 o tempo todo, porque isso é feito antes de definir a variável e antes de obter a variável.
Em Swift, podemos ter propriedades que são calculadas quando obtidas e podemos fazer algo quando definidas. Também poderíamos fazer isso em Objective-C:
fonte
A obtenção e configuração de variáveis dentro das classes refere-se a recuperar ("obter") ou alterar ("definir") seus conteúdos.
Considere uma variável
members
de uma classefamily
. Naturalmente, essa variável precisaria ser um número inteiro, já que uma família nunca pode consistir em dois pontos e algo pessoas.Portanto, você provavelmente iria em frente definindo a
members
variável assim:Isso, no entanto, dará às pessoas que usam essa classe a possibilidade de definir o número de membros da família em algo como 0 ou 1. E, como não existe família de 1 ou 0, isso é lamentável.
É aqui que entram os getters e setters. Dessa forma, você pode decidir por si mesmo como as variáveis podem ser alteradas e quais valores elas podem receber, bem como decidir qual conteúdo elas retornam.
Voltando à nossa aula de família, vamos ter certeza de que ninguém pode definir o
members
valor para nada menos do que 2:Agora podemos acessar a
members
variável como antes, por digitaçãoinstanceOfFamily.members
, e graças à função setter, também pode configurá-lo de valor como antes, por digitação, por exemplo:instanceOfFamily.members = 3
. O que mudou, entretanto, é o fato de que não podemos mais definir essa variável para nada menor que 2.Observe a introdução da
_members
variável, que é a variável real para armazenar o valor que definimos por meio damembers
função setter. O originalmembers
agora se tornou uma propriedade computada, o que significa que ele age apenas como uma interface para lidar com nossa variável real.fonte
members
==>count
,numberOfMembers
;var members : Set<Person>
??set (newVal) { ... }
, newVal está implícito, portantoset { _members = newVal }
também está correto._members
devem ser privadas, caso contrário, o comandoinstanceOfFamily._members=1
seria definidoinstanceOfFamily.members
com um valor abaixo de 2newValue
em Swift 4 - docs.swift.org/swift-book/LanguageGuide/Properties.html#ID260Uma pergunta simples deve ser seguida por uma resposta curta, simples e clara.
Quando estamos obtendo um valor da propriedade, ele dispara sua
get{}
parte.Quando estamos definindo um valor para a propriedade, ela dispara sua
set{}
parte.PS. Ao definir um valor para a propriedade, SWIFT cria automaticamente uma constante chamada "newValue" = um valor que estamos definindo. Após um constante "newValue" torna-se acessível na
set{}
parte da propriedade .Exemplo:
fonte
Você deve olhar para Propriedades Computadas
Em seu exemplo de código,
perimeter
é uma propriedade sem backup de uma variável de classe; em vez disso, seu valor é calculado usando oget
método e armazenado por meio doset
método - geralmente referido como getter e setter .Quando você usa essa propriedade desta forma:
você está invocando o código contido no
get
bloco de código e quando o usa desta forma:você está chamando o código contido no
set
bloco de código, ondenewValue
é preenchido automaticamente com o valor fornecido à direita do operador de atribuição.As propriedades computadas podem ser lidas e gravadas se um getter e um setter forem especificados, ou somente leitura se apenas o getter for especificado.
fonte
variável declara e chama assim em uma classe
agora você deseja programar para tornar o valor padrão de x maior ou igual a 3. Agora, considere o caso hipotético se x for menor que 3, seu programa falhará. então, você quer que as pessoas coloquem 3 ou mais de 3. O Swift facilitou para você e é importante entender essa maneira um pouco avançada de datar o valor da variável porque eles serão amplamente usados no desenvolvimento do iOS. Agora vamos ver como get e set serão usados aqui.
se ainda tiver dúvidas, lembre-se, o uso de get e set serve para atualizar qualquer variável da maneira que queremos que seja atualizada. get e set darão a você melhor controle para controlar sua lógica. Ferramenta poderosa, portanto, não facilmente compreensível.
fonte