1

我使用 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第一次运行时,我想我已经将 userInfo 的数据从 100 更改为 99。但是userInfo当函数第二次运行时,我的数据仍然是 100 minus

如何更新userInfo的数据?

谢谢你。

4

2 回答 2

1

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

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

于 2015-06-04T13:43:39.470 回答
1

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

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

于 2015-06-04T13:43:46.477 回答