El mejor tutorial de propiedad Swift en 2024. En este tutorial podrás aprender Propiedades de almacén,Propiedades de almacenamiento de retardo,Ejemplos de variables,Propiedades de cálculo,Atributo de sólo lectura de cálculo,propiedad Observador,Las variables globales y locales,Tipo de propiedad,Obtener y establecer el valor del tipo de propiedad,
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én | Propiedades 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.
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.
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 lavar
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 教程
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).
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.
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.
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 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
atributos de modo de cálculo y observador descrito también se puede utilizar para las variables globales y locales.
Las variables locales | Las 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. |
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.
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