【发布时间】:2018-02-13 05:39:50
【问题描述】:
我不知道我是不是太累了,但我认为还有更多。 (我尝试了两杯咖啡,但仍然无法解决问题......)
我想让一个变量从外部只读,但可以通过方法写入。 (所以就像在那个例子中一样,我可以确保 favoriteNumber 只是个位数。
(我不想将其设为计算属性并在 get {}, set{} 中执行此操作,因为在我的另一个项目中,我想根据不同于 set { 的“newValue”的值修改变量})
struct Person {
var name: String
private(set) var favoriteNumber: Int? // Should only be single-digit
init(name: String, number: Int) {
self.name = name
// Make sure favorite number is single-digit
guard number >= 0 && number < 10 else {
self.favoriteNumber = nil
}
self.favoriteNumber = number
}
func changeFavoriteNumber(number: Int) {
guard number >= 0 && number < 10 else { return }
self.favoriteNumber = number
}
}
.
线
self.favoriteNumber = number
在函数中
changeFavoriteNumber(number:)
引发错误
"Cannot assign to property: 'self' is immutable"
并建议“标记方法'mutating'以使'self'可变”。但这不是我想要的,因为我不想修改 Person 类型的实例,而是修改可变变量... (var favoriteNumber)
应该这样使用:
let frank = Person.init(name: "Frank", number: 9)
frank.changeFavoriteNumber(number: 8)
我不知道这里发生了什么(即使现在喝了 3 杯咖啡 :)
【问题讨论】:
-
mutating正是您所需要的。它允许var声明的变量更改它们的favoriteNumber属性。 -
是的,您需要
var才能使用mutating:) -
@Cristik 感谢您的帮助并指出
var声明 - 我忽略了这一点:)
标签: ios swift access-control