BOOL Getter中的Exc_bad_access在swift中

时间:2016-02-11 08:54:34

标签: ios iphone swift getter-setter

我想在属性的布尔值为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

2 个答案:

答案 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)

如果您想使用getset,您可能需要另外一个变量来保存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
    }
}  

但是从我在您的代码示例中看到的内容,您根本不需要setget。你只需要使用didSet代替。像这样

var reportActivityStarted:Bool {
            didSet {
            if reportActivityStarted {
                //Operations when boolean is true
            }else{
                //Operations when boolean is false
            }
        }
}