我想在属性的布尔值为true且false为true时进行一些操作 我为此设置了getter setter,所以我可以在boolean属性的setter上进行这些操作。
但总是在EXC_BAD_ACCESS代码= 2时崩溃,任何人都可以帮助我理解我在这里做错了什么。
var reportActivityStarted:Bool {
set {
if self.reportActivityStarted {
//Operations when boolean is true
}else{
//Operations when boolean is false
}
}
get{
return self.reportActivityStarted
}
}
当我更改它的布尔值时,它会在获取{
时崩溃self.reportActivityStarted = true
答案 0 :(得分:3)
正如 @Unheilig 已经指出的那样,您正在生成无限递归调用。事实上,reportActivityStarted
的getter以递归方式调用自身。
如果您想在设置或检索属性时运行某些逻辑,那么您应该使用属性观察者,如下所示:
var reportActivityStarted: Bool {
willSet(newValue) {
switch reportActivityStarted {
case true: print("reportActivityStarted is true before assignment") // <- your logic goes here
case false: print("reportActivityStarted is false before assignment") // <- your logic goes here
}
}
}
答案 1 :(得分:0)
如果您想使用get
,set
,您可能需要另外一个变量来保存set
中的值并在get
中请求它。像这样:
var _reportActivityStarted = false
var reportActivityStarted:Bool {
set {
_reportActivityStarted = newValue
if _reportActivityStarted {
//Operations when boolean is true
}else{
//Operations when boolean is false
}
}
get{
return _reportActivityStarted
}
}
但是从我在您的代码示例中看到的内容,您根本不需要set
和get
。你只需要使用didSet
代替。像这样
var reportActivityStarted:Bool {
didSet {
if reportActivityStarted {
//Operations when boolean is true
}else{
//Operations when boolean is false
}
}
}