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 Properties | Propriedades 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 ovar
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 locais | Variá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