subtitulada reparto pelicula online mitchell joni completa carter blue swift accessor

reparto - Swift, ¿qué son ''get'' y ''set''?



get carter wikipedia (4)

Deberías mirar las propiedades calculadas

En el ejemplo del código, el perimeter es una propiedad no respaldada por una variable de clase, sino que su valor se calcula utilizando el método get y se almacena mediante el método set , generalmente denominado getter y setter .

Cuando usas esa propiedad de esta manera:

var cp = myClass.perimeter

está invocando el código contenido en el bloque de código get , y cuando lo usa así:

myClass.perimeter = 5.0

está invocando el código contenido en el bloque de código set , donde newValue se completa automáticamente con el valor proporcionado a la derecha del operador de asignación.

Las propiedades calculadas se pueden leer si se especifican tanto un getter como un setter, o solo si se especifica getter.

Estoy aprendiendo Swift y estoy leyendo The Swift Programming Language de Apple, no tengo antecedentes de Objective C (solo PHP, JS y otros, pero no Obj C)

En la página 24-25 veo este código:

//...Class definition stuff... var perimeter: Double { get { return 3.0 * sideLength } set { sideLength = newValue / 3.0 } } //...Class continues...

Esta parte NO está especificada en el libro y no puedo obtener para qué sirven.

¿Alguien puede explicarme qué es esto para obtener y establecer ?


El obtener y establecer variables dentro de las clases se refiere a recuperar ("obtener") o alterar ("configurar") sus contenidos.

Considere una variable members de una family clase. Naturalmente, esta variable necesitaría ser un número entero, ya que una familia nunca puede consistir en dos puntos y personas.

Entonces, probablemente sigas adelante definiendo la variable de members esta manera:

class family { var members:Int }

Esto, sin embargo, le dará a la gente que usa esta clase la posibilidad de establecer el número de miembros de la familia en algo como 0 o 1. Y como no existe una familia de 1 o 0, esto es bastante desafortunado.

Aquí es donde entran y salen los buscadores y los iniciadores. De esta forma, puede decidir por sí mismo cómo se pueden modificar las variables y qué valores pueden recibir, así como decidir qué contenido devuelve.

Volviendo a nuestra clase familiar, asegurémonos de que nadie pueda establecer el valor de los members a menos de 2:

class family { var _members:Int = 2 var members:Int { get { return _members } set (newVal) { if newVal >= 2 { _members = newVal } else { println(''error: cannot have family with less than 2 members'') } } } }

Ahora podemos acceder a la variable de members como antes, escribiendo instanceOfFamily.members , y gracias a la función setter, también podemos establecer su valor como antes, escribiendo, por ejemplo: instanceOfFamily.members = 3 . Lo que ha cambiado, sin embargo, es el hecho de que no podemos establecer esta variable en algo más pequeño que 2 más.

Tenga en cuenta la introducción de la variable _members , que es la variable real para almacenar el valor que establecemos a través de la función de establecimiento de members . Los members originales ahora se han convertido en una propiedad calculada, lo que significa que solo actúa como una interfaz para manejar nuestra variable real.


Eso en realidad se explica justo antes del código:

Además de las propiedades simples que se almacenan, las propiedades pueden tener un getter y un setter.

class EquilateralTriangle: NamedShape { ...

Cuando alguna otra clase quiere obtener esa variable perimetral, lo hacen:

let someVar = myTriangle.perimeter

... Lo que llama esto:

get{ return 3.0 * self.sideLength }

Y así es esencialmente como si el controlador de llamadas hiciera esto:

let someVar = 3.0 * myTriangle.sideLength

Cuando configura la variable desde otro objeto, se ve así:

myTriangle.perimeter = 100

Que invoca el código en el bloque set{} :

set { sideLength = newValue / 3.0 }

Y así es como si la clase que está configurando la variable hubiera hecho esto:

myTriangle.sideLength = 100/3.0

En realidad es solo por conveniencia : puede llamar esto desde otro código sin tener que dividir por o multiplicar por 3 todo el tiempo, porque eso se hace justo antes de establecer la variable y justo antes de obtener la variable.

En Swift, podemos tener propiedades que se computan cuando se obtienen y que pueden hacer algo cuando se configuran. Podríamos hacer esto en Objective-C también:

// .h @property (nonatomic) double perimeter; //.m - (double)perimeter { return self.sideLength * 3.0; } - (void)setPerimeter:(double)perimeter { self.perimeter = perimeter; // In Swift, this is done automatically. self.sideLength = perimeter / 3.0; }


Una simple pregunta debe ser seguida por una respuesta corta, simple y clara.

  • Cuando estamos obteniendo un valor de la propiedad, se dispara su parte get{} .

  • Cuando estamos estableciendo un valor para la propiedad, dispara su parte set{} .

PD. Al establecer un valor para la propiedad, SWIFT crea automáticamente una constante llamada "newValue" = un valor que estamos configurando. Después de que un "nuevo valor" constante sea accesible en la parte set{} del set{} la propiedad.

Ejemplo:

var A:Int = 0 var B:Int = 0 var C:Int { get {return 1} set {print("Recived new value", newValue, " and stored into ''B'' ") B = newValue } } //When we are getting a value of C it fires get{} part of C property A = C A //Now A = 1 //When we are setting a value to C it fires set{} part of C property C = 2 B //Now B = 2