Latest web development tutorials

propriedade Swift

valor da propriedade Swift com uma classe, estrutura ou associação específica enumeração.

A propriedade pode ser dividida em propriedades de armazenamento e as propriedades calculado:

Store PropertiesPropriedades de cálculo
Como um exemplo de constante ou variável parte de armazenamento Calculado (em vez de armazenar) um valor
Para as classes e estruturas Para as classes, estruturas e enumerações

propriedades de armazenamento e as propriedades são em geral usadas para calcular as instâncias de um tipo particular.

Propriedades também pode ser usado diretamente no próprio tipo, esta propriedade é chamado de atributo de tipo.

Alternativamente, você pode definir o observador propriedades para monitorar as mudanças nos valores dos imóveis, a fim de desencadear uma operação personalizada. visualizador de atributo podem ser adicionados para escrever o seu próprio atributo de memória pode ser adicionado às propriedades herdadas da classe pai.


Store Properties

Em termos simples, um atributo de memória é uma constante ou variável armazenada na instância de uma determinada classe ou estrutura dentro.

propriedade de armazenamento pode ser um atributos de armazenamento variáveis ​​(definidas pela palavra-chave var), ele também pode ser um atributos de armazenamento constantes (definidas pela palavra-chave deixá).

  • Você pode especificar um valor padrão na propriedade quando as definições são armazenadas

  • Você também pode definir ou modificar o valor armazenado da propriedade durante a construção, e até mesmo modificar o valor da propriedade de armazenamento constante

import Cocoa

struct Number
{
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

A saída de execução de programa acima é:

67
3.1415

Considere o seguinte código:

let pi = 3.1415

pi Código especificar valores padrão armazenados no atributo definição quando (pi = 3,1415), então não importa quando você instanciar a estrutura, isso não vai mudar.

Se você definir uma propriedade de armazenamento constante, ele vai reclamar se você tentar modificar da seguinte forma:

import Cocoa

struct Number
{
    var digits: Int
    let numbers = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7

O erro de execução do programa acima, o erro é a seguinte:

error: cannot assign to property: 'numbers' is a 'let' constant
n.numbers = 8.7

Significado "números" é uma constante, você não pode modificá-lo.


Propriedades de armazenamento de atraso

atributo de memória atraso refere-se pela primeira vez quando a propriedade é chamado de seu valor inicial será calculada.

Antes de usar a declaração de atributopreguiçoso para indicar as propriedades de um armazenamento de atraso.

Nota:
propriedade atraso de armazenamento deve ser declarado como uma variável (usando o var palavra-chave), uma vez que o valor da propriedade não pode ser concluída antes do construtor de instância. A propriedade constante antes da construção está completa deve ter um valor inicial e, portanto, não pode ser declarado como propriedade adiada.

Propriedades atraso de armazenamento são geralmente utilizados:

  • Atrasar a criação de objectos.

  • Quando o valor da propriedade depende da outra classe desconhecida

import Cocoa

class sample {
    lazy var no = number() // `var` 关键字是必须的
}

class number {
    var name = "w3big Swift 教程"
}

var firstsample = sample()
print(firstsample.no.name)

A saída de execução de programa acima é:

w3big Swift 教程

Exemplos de variáveis

Se você já teve experiência em Objective-C, você deve saber Objective-C valor de armazenamento de instância de classe e referência fornece dois métodos. Para a propriedade, ele também pode ser usado como uma instância backend variáveis ​​para armazenar valores de propriedades.

linguagem de programação Swift usar essas teorias para alcançar uma propriedade unificada. Swift atributos há variáveis ​​de instância correspondentes, propriedades de armazenamento de back-end não pode ser acessado diretamente. Isso evita os problemas dos métodos de acesso em diferentes cenários, mas também para simplificar a definição da propriedade como uma declaração.

Toda a informação em um tipo de propriedade - incluindo o nome, o tipo e características de gerenciamento de memória - tudo em um lugar único definições (definição de tipo).


Propriedades de cálculo

Além de atributos de armazenamento, categorias, estruturas e as contagens podem ser definidos para calcular os valores de propriedades calculados atributo não é armazenada directamente, mas para proporcionar um getter para obter o valor de um Setter opcional para definir o valor de outras propriedades ou variáveis indirectos.

import Cocoa

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)

A saída de execução de programa acima é:

(150.0, 75.0)
-150.0
-65.0

Se o setter propriedade calculada não define o nome do parâmetro representa o novo valor, você pode usar o nome padrão newValue.


Atributo somente leitura de cálculo

Só não Getter calculada setter propriedade é um atributo somente leitura cálculo.

Somente leitura propriedade sempre retorna um valor calculado, (.) Para acessar via ponto, mas não é possível definir o novo valor.

import Cocoa

class film {
    var head = ""
    var duration = 0.0
    var metaInfo: [String:String] {
        return [
            "head": self.head,
            "duration":"\(self.duration)"
        ]
    }
}

var movie = film()
movie.head = "Swift 属性"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

A saída de execução de programa acima é:

Swift 属性
3.09

Nota:

Você deve usar o var palavra-chave para definir atributos calculados, incluindo o cálculo atributo somente leitura, porque o seu valor não é fixo. let palavra-chave é usado apenas para declarar um atributo constante que não pode ser modificado após a inicialização do valor.


propriedade Observer

Mudança atribuir Viewer para monitorar e responder a valor da propriedade de cada propriedade é definida quando o valor da propriedade será chamado a observar, e até mesmo o novo valor e o valor atual da mesma época não é excepção.

Você pode adicionar propriedades para o espectador para além da memória de atraso atributo diferente de propriedades de armazenamento também pode adicionar atributos de observador para uma propriedade herdada (incluindo armazenamento e computação atributos de propriedade), substituindo formas de atributo.

Nota:
Você não precisa adicionar um observador propriedade para o cálculo das propriedades não pode ser sobrecarregado, porque você pode monitorar diretamente e responder às mudanças valor setter.

Você pode adicionar um ou todos os seguintes observador para a propriedade:

  • willSet antes de definir uma nova chamada de valor
  • didSet depois de um novo valor é definido para chamar imediatamente
  • willSet e didSet observador não será chamado na propriedade processo de inicialização
import Cocoa

class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("计数器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增数 \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

A saída de execução de programa acima é:

计数器: 100
新增数 100
计数器: 800
新增数 700

variáveis ​​globais e locais

atributos modo de Cálculo e observador descrito também pode ser usado para as variáveis ​​globais e locais.

As variáveis locaisVariáveis globais
Na função, método ou fechamentos internos variáveis ​​definidas. Variável fora da função, método ou qualquer tipo de definição de encerramento.
Para armazenar e recuperar valores. Para armazenar e recuperar valores.
propriedade de armazenamento para obter e definir o valor. propriedade de armazenamento para obter e definir o valor.
Também é usado para calcular propriedades. Também é usado para calcular propriedades.

Tipo de propriedade

atributo de tipo é definido como parte do tipo no tipo de escrever chaves ultraperiféricas ({}) no interior.

Utilizar a palavra-chave estática para definir o tipo de valor tipo de atributo, palavra-chave class para definir um atributo tipo de classe.

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

Nota:
exemplo computacional do atributo tipo é somente leitura, mas você também pode definir o tipo de sintaxe de atributo cálculo semelhante legível e gravável computacional com o atributo de instância.


Obter e definir o valor do tipo de propriedade

Exemplos de propriedades semelhantes, do tipo de acesso à propriedade é levada a cabo pelo operador ponto (.). No entanto, o tipo de propriedade é para passar e definir o tipo de si, em vez de por meio de exemplo. Exemplos são os seguintes:

import Cocoa

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 = 98
print(stud1Mark1.InternalMarks) 

stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)

A saída de execução de programa acima é:

97
87