En realidad, eso 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 de perímetro, hacen esto:
let someVar = myTriangle.perimeter
... Que llama a esto:
get{
return 3.0 * self.sideLength
}
Y, por lo tanto, es esencialmente como si el controlador de llamada hiciera esto:
let someVar = 3.0 * myTriangle.sideLength
Cuando establece la variable de otro objeto, se ve así:
myTriangle.perimeter = 100
Que invoca el código en el set{}
bloque:
set {
sideLength = newValue / 3.0
}
Y es como si la clase que está configurando la variable hubiera hecho esto:
myTriangle.sideLength = 100/3.0
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:
// .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;
}