Swift – Propriedades de

Publicidade

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-