我有GameState
班的代表。每次使用gameStateUpdated
更改playing:Bool
时,我都会尝试调用didSet
方法。我一直在我的代表身上得到EXC_BAD_ACCESS
。甚至检查它是否为零。
设置playing
后,我得到EXC_BAD_ACCESS
,我肯定我的delegate
不是零。
var stateDelegate:GameStateDelegate?
var playing = false {
didSet {
stateDelegate?.gameStateUpdated(self.playing)
}
}
我知道我不想从计算属性的setter中引用self.playing
。但这不应该是计算属性。
修改
如果我使用stateDelegate?
或stateDelegate!
,也会发生同样的事情。之前我有可选的链接,但它没有工作,所以我想我试着强迫它。
答案 0 :(得分:4)
如果问题与使用!
无关,那么让我们在其他地方查找问题。
也许无限递归?
更具体地说gameStateUpdated
内发生了什么?事实上,如果此方法正在更改playing
属性,则didSet
会一次又一次地触发......
您可以轻松查看此内容,只需将breakpoint
添加到didSet
或以下代码行。
print("didSet called")
如果多次调用didSet
,那就是问题所在。