是否允许从NSTimer调用静态方法?编译器不允许这样做,抱怨神秘的"额外的参数'选择器'在电话中。
struct MyStruct {
static func startTimer() {
NSTimer.scheduledTimerWithTimeInterval(1.0, target: MyStruct.self, selector: "doStuff", userInfo: nil, repeats: true)
}
static func doStuff() {
println("Doin' it.")
}
}
MyStruct.startTimer()
但当然,这很好......
class MyClass {
func startTimer() {
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true)
}
func doStuff() {
println("Doin' it.")
}
}
var instanceOfClass = MyClass()
instanceOfClass.startTimer()
我只是语法错误,还是不允许?
答案 0 :(得分:3)
NSTimer
利用Objective-C运行时来动态调用方法。声明struct
时,您正在使用Swift运行时,因此NSTimer
无法合作。结构与类不同,您可以阅读有关它们的更多信息here。
此外,static
函数相当于Objective-C中的类方法,因此,如果这是您的原始目标,那么以下内容就足够了:
class MyClass: NSObject {
class func startTimer() {
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true)
}
class func doStuff() {
println("Doin' it.")
}
}
MyClass.startTimer()