Swift: Cuando hicimos una extensión de Int, ¿qué se supone que es el "yo" dentro de un property getter?

Parece que es un error y se resolvió en Xcode 7 con Swift (2b3)

Para hacer una observación conveniente, publiquemos el código en el área de juegos, el resultado será indicado por los comentarios.

extension Int { var sq: Int { mutating get { self //5 self = self * self //25 return self //25 Here 25 is made } } } var n: Int = 5 //5 n.sq //25 n //5 Why isn't 25? 

Mi pregunta es si self dentro del getter de la propiedad sq se refiere al integer en sí, ¿por qué n guarda 5 después de n.sq ?

Veamos qué sucede si simplemente agregamos un setter:

 extension Int { var sq: Int { mutating get { self //5 self = self * self //25 return self //25 Here 25 is made } //It's not making any sense, just for testing what's self referring to set { } } } var n: Int = 5 //5 n.sq //25 n //25 It's just what we want! 

Entonces, ¿cuál es el problema en el caso superior?

BTW, en este caso, implementar una function como sq() será más razonable y se probó, pero solo quiero saber por qué no funciona dentro del getter propiedad.

Un par de soluciones:

Cambie la línea n.sq a n = n.sq ya que el método get devuelve un valor basado en sí mismo y realmente no lo transforma.

Si desea utilizar simplemente un método tal como lo está actualmente, escríbalo dentro de la extensión así:

 mutating func sq() { self = self * self } 

Entonces puedes llamar a n.sq() y hará lo que quieras