我有一个带有一个参数的函数。此参数具有默认值。 (true)
func disableButton(animated: Bool = true) {
if (animated) {
...
} else {
...
}
}
所以我可以将函数称为:
disableButton(animated: true)
或:
disableButton()
他们给了我相同的结果。
现在我有一个NSTimer在完成时运行一个选择器,如下所示:
buttonFadeTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(1.5), target: self, selector: Selector("disableButton"), userInfo: nil, repeats: false)
它将在完成时发送disableButton()消息。但是,完成后会导致应用程序崩溃。
如果我这样做:
func disableButton() {
disableButton(animated: true)
}
然后计时器成功发送该消息,应用程序不会崩溃。
当然这非常丑陋,限制了默认参数的优秀Swift功能。
这是一个错误(我应该报告)还是我做错了?
感谢您的帮助!
答案 0 :(得分:1)
-disableButton
和-disableButton:
选择器之间存在差异。但你不能像这样使用你想要的选择器:
buttonFadeTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(1.5), target: self, selector: Selector("disableButton:"), userInfo: nil, repeats: false)
因为NSTimer
这里假定选择器没有参数或者选择器带有单个参数(它将用于传递触发NSTimer实例)。
我相信,你应该从使用选择器进行迁移,因为你想要使用Swift提供的所有强大功能,只要选择器是过时的模式。
只需注意:如果您使用"disableButton:"
选择器,它可以工作,也许NSTimer的指针将被解释为true而不是,不确定将会发生什么(也许它可能会崩溃到期Swift强力打字的东西)。但取决于这种行为是一种不好的做法,可能会导致极难消灭的错误。