从 NSTimer 调用静态方法。可能吗?
Calling a static method from NSTimer. Is it possible?
是否允许从 NSTimer 调用静态方法?编译器不允许这样做,抱怨神秘的“调用中的额外参数'selector'。
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()
我只是语法错误,还是不允许?
NSTimer
利用 Objective-C 运行时来动态调用方法。当声明 struct
时,您正在使用 Swift 运行时,因此 NSTimer
无法配合。结构与 classes 不同,您可以阅读有关它们的更多信息 here。
此外,static
函数等同于 Objective-C 中的 class 方法,因此如果那是您原来的 objective,那么以下内容就足够了:
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()
是否允许从 NSTimer 调用静态方法?编译器不允许这样做,抱怨神秘的“调用中的额外参数'selector'。
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()
我只是语法错误,还是不允许?
NSTimer
利用 Objective-C 运行时来动态调用方法。当声明 struct
时,您正在使用 Swift 运行时,因此 NSTimer
无法配合。结构与 classes 不同,您可以阅读有关它们的更多信息 here。
此外,static
函数等同于 Objective-C 中的 class 方法,因此如果那是您原来的 objective,那么以下内容就足够了:
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()