Swift-Properties

Anuncios

El lenguaje Swift 4 proporciona propiedades para clase, enumeración o estructura para asociar valores. Las propiedades se pueden clasificar en Propiedades almacenadas y propiedades calculadas.

Diferencia entre las Propiedades Almacenadas y las Propiedades Calculadas

Propiedad almacenada Propiedad computada
Almacenar valores constantes y variables como instancia Calcular un valor en lugar de almacenar el valor
Proporcionado por clases y estructuras Proporcionado por clases, enumeraciones y estructuras

Tanto las propiedades almacenadas como las calculadas están asociadas con el tipo de instancia. Cuando las propiedades están asociadas con sus valores de tipo, se define como ‘Propiedades de tipo’. Las propiedades almacenadas y calculadas generalmente se asocian con instancias de un tipo particular. Sin embargo, las propiedades también se pueden asociar con el tipo en sí. Estas propiedades se conocen como propiedades de tipo. Los observadores de propiedades también se utilizan

  • Para observar el valor de las propiedades almacenadas
  • Para observar la propiedad de la subclase heredada derivada de la superclase

Propiedades almacenadas

Swift 4 introduce el concepto de propiedad almacenada para almacenar las instancias de constantes y variables. Las propiedades almacenadas de las constantes se definen por la palabra clave ‘ let ‘y las propiedades almacenadas de las variables se definen por la palabra clave’ var’.

  • Durante la definición, la propiedad almacenada proporciona ‘valor predeterminado’
  • Durante la inicialización, el usuario puede inicializar y modificar los valores iniciales
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")

Cuando ejecutamos el programa anterior usando playground, obtenemos el siguiente resultado−

673.1415

Considere la siguiente línea en el código anterior−

let pi = 3.1415

Aquí, la variable pi se inicializa como un valor de propiedad almacenado con la instancia pi = 3.1415. Por lo tanto, cada vez que se refiere a la instancia, solo tendrá el valor 3.1415.

Otro método para tener propiedades almacenadas es tener estructuras constantes. Por lo tanto, toda la instancia de las estructuras se considerará como «Propiedades Almacenadas 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

Cuando ejecutamos el programa anterior utilizando playground, obtenemos el siguiente resultado−

error: cannot assign to 'numbers' in 'n'n.numbers = 8.7

En lugar de reiniciar el ‘número’ a 8.7, devolverá un mensaje de error que indica que el ‘número’ se declara como constante.

Propiedad almacenada perezosa

Swift 4 proporciona una propiedad flexible llamada ‘Propiedad almacenada perezosa’ donde no calculará los valores iniciales cuando la variable se inicialice por primera vez. el modificador ‘lazy’ se usa antes de la declaración de variable para tenerlo como una propiedad almacenada perezosa.

Se utilizan propiedades perezosas−

  • Para retrasar la creación de objetos.
  • Cuando la propiedad depende de otras partes de una clase, que aún no se conocen
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)

Cuando ejecutamos el programa anterior usando playground, obtenemos el siguiente resultado−

Swift 4

Variables de instancia

En Objective C, las propiedades almacenadas también tienen variables de instancia con fines de copia de seguridad para almacenar los valores declarados en la propiedad almacenada.

Swift 4 integra ambos conceptos en una única declaración de «propiedades almacenadas». En lugar de tener una variable de instancia correspondiente y un valor de copia de seguridad, ‘propiedad almacenada’ contiene toda la información integrada definida en una única ubicación sobre la propiedad de variables por nombre de variable, tipo de datos y funcionalidades de administración de memoria.

Propiedades calculadas

En lugar de almacenar los valores, las propiedades calculadas proporcionan un captador y un configurador opcional para recuperar y establecer otras propiedades y valores indirectamente.

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)

Cuando ejecutamos el programa anterior utilizando playground, obtenemos el siguiente resultado−

(150.0, 75.0)-150.0-65.0

Cuando una propiedad calculada deja el nuevo valor sin definir, el valor predeterminado se establecerá para esa variable en particular.

Propiedades calculadas como Propiedades de solo lectura

Una propiedad de solo lectura en propiedad calculada se define como una propiedad con getter pero sin setter. Siempre se usa para devolver un valor. Se puede acceder a las variables a través de un ‘.’Sintaxis, pero no se puede establecer a otro 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!)

Cuando ejecutamos el programa anterior utilizando playground, obtenemos el siguiente resultado−

Swift 4 Properties3.09

Propiedades calculadas como Observadores de propiedades

En Swift 4 para observar y responder a los valores de propiedades Se utilizan Observadores de propiedades. Cada vez que se establecen valores de propiedad, se llama a observadores de propiedades. Excepto las propiedades almacenadas perezosas, podemos agregar observadores de propiedades a la propiedad’ heredada ‘mediante el método’overriding’.

Los observadores de propiedades se pueden definir mediante

  • Antes de almacenar el valor-willset

  • Después de almacenar el nuevo valor-didset

  • Cuando se establece una propiedad en un inicializador, no se puede llamar a los observadores de didset y willset.

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

Cuando ejecutamos el programa anterior usando playground, obtenemos el siguiente resultado−

Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700

Las variables locales y globales

Las variables locales y globales se declaran para calcular y observar las propiedades.

Variables locales Variables globales
Variables que se definen dentro de una función, método o contexto de cierre. Variables definidas fuera de contexto de función, método, cierre o tipo.
se Utiliza para almacenar y recuperar valores. Se utiliza para almacenar y recuperar valores.
Propiedades almacenadas se utiliza para obtener y establecer los valores. Las propiedades almacenadas se utilizan para obtener y establecer los valores.
También se utilizan propiedades calculadas.También se utilizan propiedades calculadas .

Propiedades de tipo

Las propiedades se definen en la sección Definición de tipo con llaves {} y el alcance de las variables también se define previamente. Para definir propiedades de tipo para tipos de valor se usa la palabra clave ‘ estática ‘y para tipos de clase se usa la palabra clave’ clase’.

Sintaxis

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 }}

Propiedades de consulta y configuración

Al igual que las propiedades de tipo de instancia, las propiedades se consultan y se establecen con ‘.’Sintaxis solo en el tipo en lugar de apuntar a la instancia.

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)

Cuando ejecutamos el programa anterior utilizando playground, obtenemos el siguiente resultado: