[英]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 9897。但是運行代碼時我會得到100 100 100 100。
當minus
號第一次運行時,我想我已經將userInfo的數據從100更改為99。但是當minus
號第二次運行時, userInfo
的數據仍然為100。
如何更新userInfo
的數據?
謝謝。
我很驚訝這不是構建錯誤/崩潰,因為userInfo
是只讀的。
您可以將其設置為NSMutableDictionary
這樣就無需更改userInfo
指針,而只是更改其指向的對象的內容,但是我想說的是,您實際上應該只使用實例變量...
您不能在計時器中更改userInfo對象。 userInfo是只讀屬性。 因此,顯而易見的解決方法是將可變對象存儲為userInfo。 例如NSMutableDictionary *或您自己的類。
但是,您從一成不變的NSDictionary開始,然后將其轉換為Swift字典。 不要那樣做 您需要直接訪問存儲的對象,即NSMutableDictionary。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.