默认参数

时间:2014-10-13 14:19:33

标签: swift default-parameters

我有一个带有一个参数的函数。此参数具有默认值。 (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功能。

这是一个错误(我应该报告)还是我做错了?

感谢您的帮助!

1 个答案:

答案 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强力打字的东西)。但取决于这种行为是一种不好的做法,可能会导致极难消灭的错误。