use*_*327 12 nstimer userinfo swift
我正在尝试使用NSTimer的userinfo传递UIButton.我已经阅读了NSTimers上有关stackoverflow的每篇文章.我变得非常接近,但却无法到达那里.这篇文章有所帮助
func timeToRun(ButonToEnable:UIButton) {
var tempButton = ButonToEnable
timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("setRotateToFalse"), userInfo: ["theButton" :tempButton], repeats: false)
}
Run Code Online (Sandbox Code Playgroud)
计时器运行的功能
func setRotateToFalse() {
println( timer.userInfo )// just see whats happening
rotate = false
let userInfo = timer.userInfo as Dictionary<String, AnyObject>
var tempbutton:UIButton = (userInfo["theButton"] as UIButton)
tempbutton.enabled = true
timer.invalidate()
}
Run Code Online (Sandbox Code Playgroud)
Ger*_*son 28
我意识到你已经设法解决这个问题,但我想我会给你一些关于使用的更多信息NSTimer.访问计时器对象以及用户信息的正确方法是使用它,如下所示.初始化计时器时,您可以像这样创建它:
NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("setRotateToFalse:"), userInfo: ["theButton" :tempButton], repeats: false)
Run Code Online (Sandbox Code Playgroud)
Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.setRotateToFalse), userInfo: ["theButton" :tempButton], repeats: false)
Run Code Online (Sandbox Code Playgroud)
然后回调看起来像这样:
func setRotateToFalse(timer:NSTimer) {
rotate = false
let userInfo = timer.userInfo as Dictionary<String, AnyObject>
var tempbutton:UIButton = (userInfo["theButton"] as UIButton)
tempbutton.enabled = true
timer.invalidate()
}
Run Code Online (Sandbox Code Playgroud)
因此,您不需要保留对计时器的引用,并尽可能避免使用令人讨厌的全局变量.如果你的类没有从NSObject它所说的没有定义回调的地方继承,你可能会在swift中遇到一个问题但是这可以通过@objc在函数定义的开头添加来轻松修复.