SWIFT:使用带有多个参数的选择器 [英] Swift: Using Selectors with Multiple Arguments

查看:24
本文介绍了SWIFT:使用带有多个参数的选择器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的应用程序模型中保留一个NSTmer,并在我的视图控制器文件中更新时间。为此,我创建了以下两个方法:

func startTimer(labelToUpdate : UILabel) {
    timerGoing = true
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "decTimeByOne:labelToUpdate:", userInfo: labelToUpdate, repeats: true)
}

func decTimeByOne(labelToUpdate : UILabel) {
        if timerGoing {
            if decreasingTime > 0 {
                decreasingTime--;
                labelToUpdate.text = "(decreasingTime)"
            }
            else {
                timerGoing = false
                timer.invalidate()
            }
        }
    }

我在控制台中收到运行时异常(我相信),有一个"无法识别的选择器"。在做了一些研究后,我的印象是这是SWIFT在选择器中调用多个参数方法所使用的语法:selector:"method Name:argumentName:",userInfo:argumentPassedIn,

最后,我想保留一个与我的模型的对象相关联的计时器,并且仅在我的应用程序视图中更新和显示该时间。这是正确的做法吗?

推荐答案

我的印象是这是SWIFT用来在选择器中调用多个参数方法的语法:`selector:"方法名称:参数名称:"

在某种程度上这是正确的,但如果您要使用NSTmer,那么它不会减轻您阅读NSTmer上的文档的责任。特别是,它不会改变由NSTmer调用的选择器不由您决定这一事实。它的形式只能是methodName:,因为它只有一个参数--计时器(不是标签或其他任何东西)。正如已经告诉您的,如果您有其他信息要传递,请将其附加到计时器,这是将传递的信息。

现在,除了,您在如何声明方法名称方面是错误的。声明为func decTimeByOne(labelToUpdate : UILabel的方法的选择器为decTimeByOne:。同样,这不是由您决定的;您必须知道如何创建选择器的规则。

这篇关于SWIFT:使用带有多个参数的选择器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆