Swift – Propriedades de
Swift 4 língua fornece propriedades para a classe de enumeração ou estrutura para associar valores. As propriedades podem ser ainda mais classificadas em Propriedades armazenadas e propriedades computadas.
Diferença entre Armazenados Propriedades e Propriedades Calculadas
Propriedade Armazenados | Propriedade Calculada |
---|---|
Loja constante e variável valores como instância | Calcular um valor em vez de armazenar o valor |
Fornecido por classes e estruturas | Fornecido por classes, estruturas e enumerações |
Ambos Armazenados e propriedades Calculadas estão associados a instâncias do tipo. Quando as propriedades estão associadas com seus valores de tipo, então ele é definido como “propriedades de tipo”. Propriedades armazenadas e computadas são geralmente associadas com instâncias de um tipo particular. No entanto, as propriedades também podem ser associadas com o tipo em si. Tais propriedades são conhecidas como propriedades do tipo. Propriedade observadores também são usados
- Para observar o valor armazenado propriedades de
- Para observar a propriedade da herança subclasse derivada da superclasse
Armazenados Propriedades de
Swift 4 introduz o conceito de Propriedade Armazenados para armazenar as instâncias de constantes e variáveis. As propriedades armazenadas das constantes são definidas pela palavra-chave ” let “e as propriedades armazenadas das variáveis são definidas pela palavra-chave “var”.
- Durante a definição de propriedade Armazenados fornece ‘valor padrão’
- Durante a Inicialização, o usuário pode inicializar e modificar os valores iniciais
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")
Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−
673.1415
Considere a seguinte linha no código acima−
let pi = 3.1415
Aqui, a variável pi é inicializado como um valor de propriedade armazenados com a instância pi = 3.1415. Assim, sempre que a instância for referenciada, ela deterá o valor 3.1415 por si só.
outro método para ter propriedades armazenadas é ter como estruturas constantes. Assim, toda a instância das estruturas será considerada como “propriedades armazenadas de constantes”.
struct Number { var digits: Int let numbers = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.numbers)")n.numbers = 8.7
Ao executar o programa acima usando parque infantil, obtemos o seguinte resultado−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
em Vez de reinicializar o ‘número’ para 8,7 ele irá retornar uma mensagem de erro indicando que o ‘número’ é declarado como constante.
Lazy Stored Property
Swift 4 provides a flexible property called ‘Lazy Stored Property’ where it won’t calculate the initialized the variable for the first time. modificador ‘preguiçoso’ é usado antes da declaração variável para tê-lo como uma propriedade preguiçosa armazenada.
são utilizadas propriedades preguiçosas−
- para atrasar a criação do objecto.
- Quando a propriedade é dependente de outras partes de uma classe, que ainda não são conhecidos
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)
Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−
Swift 4
Variáveis de Instância
Em objective-C, Armazenado propriedades também tem variáveis de instância para fins de back-up para armazenar os valores declarados na propriedade armazenados.
Swift 4 integra ambos os conceitos numa única declaração de “propriedade armazenada”. Em vez de ter uma instância correspondente variável e valor de backup “propriedade armazenada” contém toda a informação integrada definida em um único local sobre a propriedade das variáveis por nome variável, tipo de dados e funcionalidades de gestão de memória.
propriedades computadas
ao invés de armazenar os valores computados propriedades fornecem um getter e um setter opcional para recuperar e definir outras propriedades e valores indiretamente.
class sample { var no1 = 0.0, no2 = 0.0 var length = 300.0, breadth = 150.0 var middle: (Double, Double) { get { return (length / 2, breadth / 2) } set(axis){ no1 = axis.0 - (length / 2) no2 = axis.1 - (breadth / 2) } }}var result = sample()print(result.middle)result.middle = (0.0, 10.0)print(result.no1)print(result.no2)
quando executamos o programa acima usando playground, obtemos o seguinte resultado−
(150.0, 75.0)-150.0-65.0
quando uma propriedade computada deixou o novo valor como indefinido, o valor padrão será definido para essa variável em particular.
Computed Properties as Read-Only Properties
A read-only property in computed property is defined as a property with getter but no setter. É sempre usado para devolver um valor. As variáveis são acessadas através de a ‘.’Sintaxe mas não pode ser definida para outro valor.
class film { var head = "" var duration = 0.0 var metaInfo: { return }}var movie = film()movie.head = "Swift 4 Properties"movie.duration = 3.09print(movie.metaInfo!)print(movie.metaInfo!)
quando executamos o programa acima usando playground, obtemos o seguinte resultado−
Swift 4 Properties3.09
propriedades computadas como observadores da propriedade
em Swift 4 para observar e responder aos valores da propriedade observadores da propriedade são usados. Cada vez que os valores da propriedade são definidos, os observadores da propriedade são chamados. Exceto propriedades armazenadas preguiçosas, podemos adicionar observadores de propriedades à propriedade “herdada” pelo método “prevalecendo”.
Propriedade Observadores pode ser definida por
-
Antes de Armazenar o valor de – willset
-
Após Armazenar o novo valor – didset
-
Quando uma propriedade é definida em um inicializador willset e didset observadores não pode ser chamado.
class Samplepgm { var counter: Int = 0 { willSet(newTotal){ print("Total Counter is: \(newTotal)") } didSet { if counter > oldValue { print("Newly Added Counter \(counter - oldValue)") } } }}let NewCounter = Samplepgm()NewCounter.counter = 100NewCounter.counter = 800
Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
Variáveis Locais e Globais
Locais e variáveis globais são declaradas para a computação e para observar as propriedades.
Variáveis Locais | Variáveis Globais |
---|---|
Variáveis que são definidas dentro de uma função, método ou encerramento de contexto. | variáveis que são definidas fora do contexto da função, método, fecho ou tipo. |
usado para armazenar e recuperar valores. | usado para armazenar e recuperar valores. |
as propriedades armazenadas são usadas para obter e definir os valores. | propriedades armazenadas é usado para obter e definir os valores. |
propriedades computadas também são usadas. | propriedades computadas também são usadas. |
as propriedades do tipo
são definidas na seção de definição de tipo com chavetas {} e o escopo das variáveis também são definidas anteriormente. Para definir propriedades do tipo para tipos de valor é utilizada a palavra-chave “estática” e para tipos de classe é utilizada a palavra-chave “classe”.
sintaxe
struct Structname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}enum Enumname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}class Classname { class var computedTypeProperty: Int { // return an Int value here }}
propriedades de pesquisa e Configuração
assim como as propriedades do tipo de instância propriedades são questionadas e definidas com ‘.’Sintaxe apenas no tipo sozinho em vez de apontar para a instância.
struct StudMarks { static let markCount = 97 static var totalCount = 0 var InternalMarks: Int = 0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks = StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount = InternalMarks } } }}var stud1Mark1 = StudMarks()var stud1Mark2 = StudMarks()stud1Mark1.InternalMarks = 98print(stud1Mark1.InternalMarks)stud1Mark2.InternalMarks = 87print(stud1Mark2.InternalMarks)
quando executamos o programa acima usando playground, obtemos o seguinte resultado-