似乎这是一个错误并在 Xcode 7 中使用 Swift(2b3) 解决
为了方便观察,我们把代码贴到playground,结果会在评论中说明。
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?
我的问题是,如果self
在属性的 gettersq
中指的是整数本身,为什么在做n
之后保留 5 n.sq
?
让我们看看如果我们只添加一个 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!
那么,案例上部的问题是什么?
顺便说一句,在这种情况下,实现类似的函数sq()
会更合理,并且已经证明,但我只想知道为什么它在属性 getter 中不起作用。