使用 NSTimer 时如何更改 userInfo 中的数据?

How to change data in the userInfo when using NSTimer?

我使用 NSTimer 每 1 秒重复一个函数。我使用 scheduledTimerWithTimeInterval 方法的 userInfo 参数。我需要更新这个 userInfo.

中的数据
override func viewDidLoad() {
    super.viewDidLoad()

    NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "minus:", userInfo: ["number": 100], repeats: true)
}

func minus(timer: NSTimer) {
    var userInfo = timer.userInfo as! Dictionary <String, Int>
    println(userInfo["number"]!)
    userInfo["number"] = userInfo["number"]! - 1
}

我希望打印的是 100 99 98 97。但是当代码是 运行 时我得到 100 100 100 100。

第一次函数minus运行s的时候,我想我已经把userInfo的数据从100改成99了。但是userInfo函数的时候数据还是100 minus运行秒第二次.

如何更新userInfo的数据?

谢谢。

我很惊讶这不是构建错误/崩溃,因为 userInfo 是只读的。

你可以把它变成 NSMutableDictionary 这样你就不会改变 userInfo 指针你只是改变它指向的对象的内容,但我想说你真的应该只需使用一个实例变量...

您不能更改计时器中的 userInfo 对象。 userInfo 是只读的 属性。因此,显而易见的解决方法是将可变对象存储为 userInfo。例如 NSMutableDictionary* 或您自己的 class。

但是,您从不可变的 NSDictionary 开始,然后将其转换为 Swift 字典。不要那样做。您需要直接访问存储的对象,即 NSMutableDictionary。