无法调用 scheduledTimer
Cannot invoke scheduledTimer
我有这个非常简单的代码来触发计时器:
var timer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(2), target: self, selector: "timerDidFire:", userInfo: nil, repeats: true)
然而它给了我:
Cannot invoke 'scheduledTimerWithTimeInterval' with an argument list of type '(Double, target: TestVC -> () -> TestVC, selector: String, userInfo: nil, repeats: Bool)'
这没有任何意义,我的参数类型完全符合要求。
函数定义如下:
scheduledTimerWithTimeInterval(ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userInfo: AnyObject?, repeats yesOrNo: Bool) -> NSTimer
我做错了什么?
Swift 的编译错误通常非常可怕。如果他们看起来没有意义,那可能是因为他们没有。
当你遇到一个没有意义的编译器错误时,记得把它翻译成"There's something wrong with this line. I have no idea what, so I'm going to make up something totally unrelated and report that."
或者只是 "Derp?"
我的钱在你的 timerDidFire
方法上。 Post 该方法的函数定义。
此外,接收 NSTimer 方法的 class 必须是 Objective-C class。通常它是一个 UIViewController,所以你不需要任何特殊的东西,因为所有的视图控制器都是从 NSObject 继承的。
当用在一个属性
的初始值表达式中
class TestVC : UIViewController (
var timer = ... some expression using `self` ...
// ...
}
self
是 不是 TestVC
的实例,而是类型
的 "curried function"
TestVC -> () -> TestVC
这就是奇怪的错误消息的来源。实例本身是
此时尚未完全初始化。这类似于
ViewController.Type does not have a member named 中的问题,可以在此处应用相同的解决方案:
将变量声明为可选(或隐式解包可选)
并用一些 方法 初始化它,例如在 viewDidLoad
:
class TestVC: UIViewController {
var timer : NSTimer?
override func viewDidLoad() {
super.viewDidLoad()
timer = NSTimer.scheduledTimerWithTimeInterval( ... )
}
// ...
}
在 Swift 中这对我来说很好用:
1)
var updateTimer: NSTimer?
2)
在 viewDidLoad 中:
updateTimer = NSTimer.scheduledTimerWithTimeInterval(Double(2), target: self, selector: Selector("updateB:"), userInfo: nil, repeats: true)
3)
func updateB(定时器:NSTimer!){
...
}
希望对您有所帮助...
我有这个非常简单的代码来触发计时器:
var timer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(2), target: self, selector: "timerDidFire:", userInfo: nil, repeats: true)
然而它给了我:
Cannot invoke 'scheduledTimerWithTimeInterval' with an argument list of type '(Double, target: TestVC -> () -> TestVC, selector: String, userInfo: nil, repeats: Bool)'
这没有任何意义,我的参数类型完全符合要求。
函数定义如下:
scheduledTimerWithTimeInterval(ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userInfo: AnyObject?, repeats yesOrNo: Bool) -> NSTimer
我做错了什么?
Swift 的编译错误通常非常可怕。如果他们看起来没有意义,那可能是因为他们没有。
当你遇到一个没有意义的编译器错误时,记得把它翻译成"There's something wrong with this line. I have no idea what, so I'm going to make up something totally unrelated and report that."
或者只是 "Derp?"
我的钱在你的 timerDidFire
方法上。 Post 该方法的函数定义。
此外,接收 NSTimer 方法的 class 必须是 Objective-C class。通常它是一个 UIViewController,所以你不需要任何特殊的东西,因为所有的视图控制器都是从 NSObject 继承的。
当用在一个属性
的初始值表达式中 class TestVC : UIViewController (
var timer = ... some expression using `self` ...
// ...
}
self
是 不是 TestVC
的实例,而是类型
TestVC -> () -> TestVC
这就是奇怪的错误消息的来源。实例本身是 此时尚未完全初始化。这类似于 ViewController.Type does not have a member named 中的问题,可以在此处应用相同的解决方案:
将变量声明为可选(或隐式解包可选)
并用一些 方法 初始化它,例如在 viewDidLoad
:
class TestVC: UIViewController {
var timer : NSTimer?
override func viewDidLoad() {
super.viewDidLoad()
timer = NSTimer.scheduledTimerWithTimeInterval( ... )
}
// ...
}
在 Swift 中这对我来说很好用:
1) var updateTimer: NSTimer?
2) 在 viewDidLoad 中: updateTimer = NSTimer.scheduledTimerWithTimeInterval(Double(2), target: self, selector: Selector("updateB:"), userInfo: nil, repeats: true)
3) func updateB(定时器:NSTimer!){ ... }
希望对您有所帮助...