我一直不明白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
所以,如果这不是你的问题,我建议查看每个参数,看看它是否是正确的类型。