我想让selector我的方法的参数引用一个闭包属性,它们都存在于同一作用域中。例如,
selector
func backgroundChange() { self.view.backgroundColor = UIColor.blackColor() self.view.alpha = 0.55 let backToOriginalBackground = { self.view.backgroundColor = UIColor.whiteColor() self.view.alpha = 1.0 } NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(backToOriginalBackground), userInfo: nil, repeats: false) }
但是,这显示错误:Argument of #selector cannot refer to a property。
Argument of #selector cannot refer to a property
当然,我可以定义一个新的单独方法,并将闭包的实现移到该方法上,但是对于这样小的实现,我想保持节俭。
是否可以为#selector参数设置闭包?
#selector
就像@ gnasher729指出的那样,这是不可能的,因为选择器只是方法的名称,而不是方法本身。在一般情况下,我会dispatch_after在这里使用,但是在这种特殊情况下,更好的工具IMO是UIView.animateWithDuration,因为它正是该功能的作用,并且很容易调整过渡:
dispatch_after
UIView.animateWithDuration
UIView.animateWithDuration(0, delay: 0.5, options: [], animations: { self.view.backgroundColor = UIColor.whiteColor() self.view.alpha = 1.0 }, completion: nil)