使用 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。
我使用 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。