Estoy aprendiendo Swift y estoy leyendo The Swift Programming Language
de Apple, no tengo experiencia en 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é son obtener y configurar ?
Respuestas:
En realidad, eso se explica justo antes del código:
Cuando alguna otra clase quiere obtener esa variable de perímetro, hacen esto:
... Que llama a esto:
Y, por lo tanto, es esencialmente como si el controlador de llamada hiciera esto:
Cuando establece la variable de otro objeto, se ve así:
Que invoca el código en el
set{}
bloque:Y es como si la clase que está configurando la variable hubiera hecho esto:
Es realmente solo por conveniencia : puede llamar a esto desde otro código sin tener que dividir 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 calculan cuando se obtienen y pueden hacer algo cuando se establecen. También podríamos hacer esto en Objective-C:
fuente
La obtención y configuración de variables dentro de las clases se refiere a recuperar ("obtener") o alterar ("configurar") su contenido.
Considere una variable
members
de una clasefamily
. Naturalmente, esta variable debería ser un número entero, ya que una familia nunca puede estar formada por personas de dos puntos.Entonces probablemente seguiría adelante definiendo la
members
variable de esta manera:Sin embargo, esto le dará a las personas que usan esta clase la posibilidad de establecer el número de miembros de la familia en algo como 0 o 1. Y dado que no existe una familia de 1 o 0, esto es bastante desafortunado.
Aquí es donde entran los captadores y definidores. De esta manera, puede decidir por sí mismo cómo se pueden alterar las variables y qué valores pueden recibir, así como decidir qué contenido devuelven.
Volviendo a nuestra clase familiar, asegurémonos de que nadie pueda establecer el
members
valor en menos de 2:Ahora podemos acceder a la
members
variable como antes, escribiendoinstanceOfFamily.members
, y gracias a la función de organismo, también podemos configurarlo de valor que antes, por escribir, por ejemplo:instanceOfFamily.members = 3
. Sin embargo, lo que ha cambiado es el hecho de que ya no podemos establecer esta variable en un valor menor que 2.Tenga en cuenta la introducción de la
_members
variable, que es la variable real para almacenar el valor que establecemos a través de lamembers
función setter. El originalmembers
ahora se ha convertido en una propiedad calculada, lo que significa que solo actúa como una interfaz para tratar con nuestra variable real.fuente
members
==>count
,numberOfMembers
;var members : Set<Person>
??set (newVal) { ... }
, newVal está implícito, porset { _members = newVal }
lo que también es correcto._members
deben ser privadas; de lo contrario, el comandoinstanceOfFamily._members=1
se estableceríainstanceOfFamily.members
en un valor inferior a 2newValue
en Swift 4 - docs.swift.org/swift-book/LanguageGuide/Properties.html#ID260Una pregunta sencilla debe ir seguida de una respuesta breve, sencilla y clara.
Cuando obtenemos un valor de la propiedad, dispara su
get{}
parte.Cuando establecemos un valor para la propiedad, dispara su
set{}
parte.PD. Al establecer un valor para la propiedad, SWIFT crea automáticamente una constante denominada "newValue" = un valor que estamos configurando. Después de que un "newValue" constante se vuelve accesible en la
set{}
parte de la propiedad .Ejemplo:
fuente
Debería mirar Propiedades calculadas
En su ejemplo de código,
perimeter
es una propiedad que no está respaldada por una variable de clase, sino que su valor se calcula usando elget
método y se almacena a través delset
método, generalmente denominado getter y setter .Cuando usa esa propiedad de esta manera:
está invocando el código contenido en el
get
bloque de código, y cuando lo usa así:está invocando el código contenido en el
set
bloque de código, dondenewValue
se completa automáticamente con el valor proporcionado a la derecha del operador de asignación.Las propiedades calculadas se pueden leer y escribir si se especifican tanto un getter como un setter, o solo lectura si solo se especifica el getter.
fuente
variable declara y llama así en una clase
ahora desea programar para que el valor predeterminado de x sea mayor o igual a 3. Ahora tome el caso hipotético si x es menor que 3, su programa fallará. por lo tanto, desea que la gente coloque 3 o más de 3. Swift lo hizo fácil para usted y es importante comprender esta forma avanzada de fechar el valor de la variable porque la usarán ampliamente en el desarrollo de iOS. Ahora veamos cómo se usarán aquí get y set.
Si aún tiene dudas, recuerde, el uso de get y set es para actualizar cualquier variable de la forma que queremos que se actualice. get and set le dará un mejor control para gobernar su lógica. Herramienta potente, por tanto, no fácilmente comprensible.
fuente