【问题标题】:How do I iterate through an array of type Timer and set each timer equal to nil如何遍历 Timer 类型的数组并将每个计时器设置为 nil
【发布时间】:2020-12-22 05:44:16
【问题描述】:

我正在尝试遍历一组计时器以将每个计时器设置为零。我遇到了这个错误:

无法赋值:'timer' 是 'let' 常量

当我使用以下代码时:

var timers = [Timer?]()

func clearTimers() {
    for timer in timers {
        timer!.invalidate()
        timer = nil
    }
}

【问题讨论】:

  • nil 分配给本地timer 变量不会做你想做的事,即使你可以。您需要从阵列中删除计时器。只需调用timers.removeAll(keepingCapacity:false)(或true,如果您打算将新计时器添加回数组)
  • 迭代 indices 而不是定时器。
  • 为什么要将计时器设置为零?使计时器无效就足够了。还将 timer!.invalidate() 更改为 timer?.invalidate()

标签: ios swift xcode timer nstimer


【解决方案1】:

存储一个可选的数组没有多大意义,所以首先简单地将timers 数组声明为:

var timers = [Timer]()

然后您可以遍历计时器以使其无效并从数组中删除所有引用以释放它们:

func clearTimers() {
    for timer in timers {
        timer.invalidate()
    }
    timers.removeAll(keepingCapacity:false)
}

【讨论】:

    【解决方案2】:

    问题在于for timer in timers 为您提供了一个新的参考——您没有在数组 中查看实际的可选计时器。相反,遍历数组本身(通过其indices):

    func clearTimers() {
        for ix in timers.indices {
            timers[ix]?.invalidate()
            timers[ix] = nil
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多