Establezca el valor de las properties calculadas en SWIFT

Estoy intentando aprender properties computadas en swift … y sabía que necesito setter para establecer el valor de las properties computadas … estoy tratando de pero atascado … por favor, ayúdame cómo puedo establecer el valor en el área con properties setter … y sería genial si pudieras decirme cómo usar la propiedad setter y cuándo usarlo

class ViewController: UIViewController { var width : Int = 20 var height : Int = 400 var area: Int{ get{ return width * height }set(newarea){ area = newarea*10 //these line gives me an warning and area is not set } } override func viewDidLoad() { super.viewDidLoad() println("\(width)") println("\(height)") println("\(area)") // gives an error while setting value to computed properties... area = 5000 // for that we need getter and setter properties in area... area = 490 println("the new area for computed properties is as \(area)") } 

EDITAR: sin embargo, me di count de que puedo cambiar las otras properties de las properties computadas de las que se deriva como

 set(newValue){ // self.area = newValue width = newValue/10 println("the new width for computed properties is as \(width)") } } 

Pero, ¿qué pasa si quiero cambiar la propiedad computada por sí misma

Una propiedad computada es solo eso: un valor computado, en su caso, de ancho y alto. No hay ninguna variable de instancia donde se almacene el valor de las properties, no puede cambiar la "propiedad computada en sí".

Y no tiene sentido: si el área se puede establecer en un valor diferente, ¿qué debería devolver el método getter? ¿Este nuevo valor o width*height ?

Entonces, lo más probable es que desee una propiedad computada de solo lectura para el área:

 var area: Int { get { return width * height } } 

Como ya notó, el configurador puede modificar los valores de otras properties almacenadas , por ejemplo:

 class Rectangle { var width : Int = 20 var height : Int = 400 var area: Int { get { return width * height } set(newArea){ // Make it a square with the approximate given area: width = Int(sqrt(Double(newArea))) height = width } } } 

Pero incluso entonces los resultados pueden ser sorprendentes (debido al networkingondeo integer):

 let r = Rectangle() r.area = 200 println(r.area) // 196 

Creo que estás malinterpretando el concepto de propiedad informática. Por definición, una propiedad computada es aquella cuyo valor no puede establecer porque, bueno, se calcula. No tiene existencia independiente. El propósito del configurador en una propiedad computada no es establecer el valor de la propiedad, sino establecer los valores de otras properties, a partir de las cuales se calcula la propiedad computada. Tomemos, como ejemplo, un cuadrado. Su longitud lateral es una propiedad var y el área es una propiedad computada cuyo getter devuelve s * s y cuyo setter establece s para ser la raíz cuadrada de newValue (la nueva área). El setter no establece el área. Establece la longitud lateral desde la cual se obtendrá el área computada la próxima vez que acceda a la propiedad del área.

 Rather than storing a value ,Computed property provides a getter and ,optionally a setter which indirectly retrieve and set other properties and values respectively . struct Point { var x = 0.0 ,y = 0.0 } struct Shape { var origin = Point ( ) var centre : Point { get { return Point (x:origin.x/2 y:origin.y/2) } set(newCentre ) { origin.x = newCentre.x/2 origin.y = newCentre.y/2 } } } } The Shape structure defines a custom getter and setter method for computed variable called Centre .The Centre property then access through dot syntax ,which causes getter for centre to be called retrieve the current property value .Rather than returning a existing value ,the getter actually calculates and returns a new point that represent centre of the shape . If a Computed property setter does not define a name for the new value to be set a default name of "newValue" is used Below is an alternative version of Rect structure ,which takes advantage of this shorthand notation. struct Point { var x = 0.0 ,y = 0.0 } struct Shape { var origin = Point ( ) var centre : Point { get { return Point (x:origin.x/2 y:origin.y/2) } set(newCentre ) { origin.x = newValue.x/2 origin.y = newValue.y/2 } } } } Important - A computed property with a getter but no setter is known as read only Computed Property .It always returns a value and can be accessed through dot syntax .However the value can't be altenetworking .