我不明白这个if语句作为计时器执行的是nil
if timer != nil
{
logInfo("Cancelling notification for op=\(op), count=\(self.retryWindow.count)")
timer!.invalidate()
答案 0 :(得分:1)
多线程是一个可能的原因。在您的if
声明与您对invalidate
的通话之间,timer
可能已在另一个主题上设为nil
。
请勿核对nil
。安全地打开包装。
if let timer = timer {
timer.invalidate()
}
答案 1 :(得分:0)
最简单的方法是使用魔法选项的强大功能..没有if let
或guard
..因为你的计时器已经是一个可选项,所以在一个可选项之上调用方法,以及所有方法应该由编译器自动处理。
timer?.invalidate()
timer = nil
如果存在invalidate
,它将会调用方法timer
。