Latest web development tutorials

propiedad Swift

Swift valor de la propiedad con una clase, estructura o asociación específica enumeración.

La propiedad puede ser dividida en propiedades de almacenamiento y las propiedades calcula:

Propiedades de almacénPropiedades de cálculo
Como un ejemplo de parte de almacenamiento constante o variable Calculado (en lugar de almacenar) un valor
Para las clases y estructuras Para las clases, estructuras y enumeraciones

propiedades de almacenamiento y las propiedades se utilizan generalmente para calcular las instancias de un tipo particular.

Las propiedades también se pueden utilizar directamente en el tipo en sí, esta propiedad se denomina atributo type.

Como alternativa, se puede definir el observador propiedades para monitorear los cambios en los valores de propiedad, con el fin de desencadenar una operación personalizada. visor de atributo se puede agregar a escribir su propio atributo de memoria pueden añadirse a las propiedades heredadas de la clase padre.


Propiedades de almacén

En términos simples, un atributo de memoria es una constante o una variable almacenada en la instancia de una clase particular o estructura interior.

Propiedad de almacenamiento puede ser una variable (atributos de almacenamiento definidas por la palabra clave var), sino que también puede ser una constante atributos de almacenamiento (definidas por la palabra clave let).

  • Puede especificar un valor por defecto en la propiedad cuando se almacenan las definiciones

  • También puede establecer o modificar el valor almacenado de la propiedad durante la construcción, e incluso modificar el valor de la propiedad de almacenamiento 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)")

La salida por encima de la ejecución del programa es:

67
3.1415

Considere el siguiente código:

let pi = 3.1415

pi Código especifica unos valores predeterminados almacenados en el atributo de definición cuando (pi = 3,1415), así que no importa cuando se instancia la estructura, no va a cambiar.

Si se define una propiedad de almacenamiento constante, que se quejará si intenta modificar de la siguiente manera:

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

El error de ejecución del programa anterior, el error es el siguiente:

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

Significado 'números' es una constante, no puede modificarlo.


Propiedades de almacenamiento de retardo

atributo de memoria de retardo se refiere al primer momento en que la propiedad se llama se calcula su valor inicial.

Antes de utilizar la declaración de atributoperezoso para indicar un retardo de propiedades del almacén.

Nota:
propiedad de almacenamiento de retardo debe ser declarado como una variable (utilizando la var palabra clave), ya que el valor de la propiedad no puede ser completado antes de la instancia constructor. La propiedad constante antes de que finalice la construcción debe tener un valor inicial, y por lo tanto no puede ser declarado como propiedad retardada.

propiedades de almacenamiento de retardo se utilizan generalmente:

  • Retrasar la creación de objetos.

  • Cuando el valor de la propiedad depende de la otra clase desconocida

import Cocoa

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

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

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

La salida por encima de la ejecución del programa es:

w3big Swift 教程

Ejemplos de variables

Si usted ha tenido experiencia en Objective-C, usted debe saber el valor de almacenamiento de instancia de clase Objective-C y referencia proporciona dos métodos. Para la propiedad, sino que también se puede utilizar como una variables de instancia backend para almacenar valores de propiedad.

lenguaje de programación rápida de usar estas teorías para lograr una propiedad unificada. Swift atribuye ninguna variable de instancia correspondiente, propiedades de almacenamiento de back-end no se puede acceder directamente. Esto evita los problemas de los métodos de acceso en diferentes escenarios, sino también para simplificar la definición de la propiedad como una declaración.

Toda la información en un tipo de propiedad - incluyendo el nombre, tipo y características de administración de la memoria - todo en un lugar único definiciones (definición de tipo).


Propiedades de cálculo

Además de los atributos de almacenamiento, categorías, estructuras y enumeraciones se pueden definir para calcular los valores de propiedad calculada atributo no se almacena directamente, sino proporcionar un captador para obtener el valor de un colocador opcional para ajustar el valor de otras propiedades o variables 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)

La salida por encima de la ejecución del programa es:

(150.0, 75.0)
-150.0
-65.0

Si el colocador propiedad calculada no define el nombre del parámetro representa el nuevo valor, puede utilizar el nombre predeterminado nuevoValor.


Atributo de sólo lectura de cálculo

Sólo Getter no calculada colocador propiedad es un atributo de sólo lectura cálculo.

Propiedad de sólo lectura siempre devuelve un valor calculado, (.) Permiten acceder a través del punto, pero no se puede establecer el nuevo 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"]!)

La salida por encima de la ejecución del programa es:

Swift 属性
3.09

Nota:

Debe utilizar el var palabra clave para definir los atributos calculados, incluyendo el cálculo de atributos de sólo lectura, porque su valor no es fijo. let de palabras clave sólo se utiliza para declarar un atributo constante que no puede ser modificado después de valor de inicialización.


propiedad Observador

Cambio de atributos Viewer para monitorear y responder a valor de la propiedad cada propiedad se establece cuando el valor de la propiedad se llamará a observar, e incluso el nuevo valor y el valor actual de la misma época no es una excepción.

Se pueden añadir propiedades para el espectador, además de la memoria de retardo de atributos distintos de propiedades de almacenamiento también puede añadir atributos observador de una propiedad heredada (incluyendo el almacenamiento y el cálculo de los atributos de propiedad) reemplazando formas de atributos.

Nota:
No es necesario añadir un observador de propiedades para el cálculo de las propiedades no se pueden sobrecargar, porque se puede controlar directamente y responder a los cambios de valor de la moda.

Se pueden añadir uno o todos de los siguientes observador de la propiedad:

  • willSet antes de establecer una nueva llamada valor
  • didSet después de un nuevo valor se establece en llamar inmediatamente
  • willSet y didSet observador no será llamado en la propiedad proceso de inicialización
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

La salida por encima de la ejecución del programa es:

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

Las variables globales y locales

atributos de modo de cálculo y observador descrito también se puede utilizar para las variables globales y locales.

Las variables localesLas variables globales
En la función, método o cierres internos definido variables. Variable fuera de la función, método o cualquier tipo de definición de cierre.
Para almacenar y recuperar valores. Para almacenar y recuperar valores.
Propiedad de almacenamiento para obtener y establecer el valor. Propiedad de almacenamiento para obtener y establecer el valor.
También se utiliza para calcular las propiedades. También se utiliza para calcular las propiedades.

Tipo de propiedad

atributo type se define como parte del tipo en el tipo de escritura llaves ultraperiféricas ({}) en el interior.

Usar la palabra clave static para definir el tipo de valor de tipo de atributo, clase de palabras clave para definir un atributo de tipo de clase.

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:
ejemplo de cálculo del tipo de atributo es de sólo lectura, pero también se puede definir la sintaxis de atributo de tipo de cálculo similar de lectura y escritura de cálculo con el atributo de instancia.


Obtener y establecer el valor del tipo de propiedad

Ejemplos de propiedades similares, el tipo de acceso a la propiedad se lleva a cabo por el operador punto (.). Sin embargo, el tipo de propiedad es conseguir a través y establezca el tipo en sí, más que a modo de ejemplo. Ejemplos son los siguientes:

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)

La salida por encima de la ejecución del programa es:

97
87