Swift 从 didSet 调用委托
Swift calling delegate from didSet
我的 GameState
class 有一个代表。每次使用 didSet
更改 playing:Bool
时,我都试图调用 gameStateUpdated
方法。我的代表一直收到 EXC_BAD_ACCESS
。甚至检查它是否为零。
当设置 playing
时,我得到一个 EXC_BAD_ACCESS
并且我确信我的 delegate
不是零。
var stateDelegate:GameStateDelegate?
var playing = false {
didSet {
stateDelegate?.gameStateUpdated(self.playing)
}
}
我知道我不想从计算的 属性 的 setter 中引用 self.playing
。但这不应该是计算出来的 属性。
编辑
如果我使用 stateDelegate?
或 stateDelegate!
,也会发生同样的事情。我之前有可选的链接,但它没有用,所以我想我会尝试强制它。
如果问题与 !
的使用无关,那么让我们在其他地方寻找问题。
也许无限递归?
更具体地说 gameStateUpdated
里面发生了什么?事实上,如果此方法正在更改 playing
属性,则 didSet
会一次又一次地触发...
你可以很容易地检查这个,只需在didSet
或下面的代码行中添加一个breakpoint
。
print("didSet called")
如果 didSet
被多次调用,那就是问题所在。
我的 GameState
class 有一个代表。每次使用 didSet
更改 playing:Bool
时,我都试图调用 gameStateUpdated
方法。我的代表一直收到 EXC_BAD_ACCESS
。甚至检查它是否为零。
当设置 playing
时,我得到一个 EXC_BAD_ACCESS
并且我确信我的 delegate
不是零。
var stateDelegate:GameStateDelegate?
var playing = false {
didSet {
stateDelegate?.gameStateUpdated(self.playing)
}
}
我知道我不想从计算的 属性 的 setter 中引用 self.playing
。但这不应该是计算出来的 属性。
编辑
如果我使用 stateDelegate?
或 stateDelegate!
,也会发生同样的事情。我之前有可选的链接,但它没有用,所以我想我会尝试强制它。
如果问题与 !
的使用无关,那么让我们在其他地方寻找问题。
也许无限递归?
更具体地说 gameStateUpdated
里面发生了什么?事实上,如果此方法正在更改 playing
属性,则 didSet
会一次又一次地触发...
你可以很容易地检查这个,只需在didSet
或下面的代码行中添加一个breakpoint
。
print("didSet called")
如果 didSet
被多次调用,那就是问题所在。