使用调度计时器与时间间隔的 NSDate 错误:调用中的额外参数"选择器"



我一直不明白Xcode在调用中抛出错误"Extra argument'selector'"的原因。方法签名很好,没有额外的'selector'argument。此外,自动完成会显示该方法,但Option点击scheduledTimerWithTimeInterval会显示"No Quick Help",字体是黑色而不是紫色,就好像编译器没有识别它一样

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var startButton: UIButton!
    @IBOutlet weak var stopButton: UIButton!
    var timer = NSTimer()
    override func viewDidLoad() {
        super.viewDidLoad()
        startButton.layer.cornerRadius = 5.0
        stopButton.layer.cornerRadius = 5.0
        // Do any additional setup after loading the view, typically from a nib.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func didPressStartButton(sender: AnyObject) {
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector:Selector("updateTimeLabel"), userInfo: NSDate(), repeats: TRUE)
    }
    func updateTimerLabel() {

    }
}

尝试true而不是TRUE。Swift中没有定义TRUE,因此调用不会编译。快速的错误是神秘的——它往往没有得到正确的失败点。

    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector:Selector("updateTimeLabel"), userInfo: NSDate(), repeats: true)

在游乐场工作良好。

更新可能也值得指出的是,Selector()的"函数"是多余的——函数的字符串名称——在本例中是"updateTimeLabel"——同样有效。

当我在第一个参数中有一个无效参数时,我也收到了这个错误,如下所示:

    var delayHighlight = 2
    var theDelay = fastPlay ? 0.0 : delayHighlight
    if playerRank > aiRank {
        var timer = NSTimer.scheduledTimerWithTimeInterval(theDelay,target:self,selector:"showPlayerOutline",userInfo:nil,repeats:false)
    }

问题是因为delayHighlight被视为一个整数,因此变量theDelay也被视为整数。将第一行更改为:

var delayHighlight = 2.0

所以,如果这不是你的问题,我建议查看每个参数,看看它是否是正确的类型。

最新更新