Вызов статического метода из NSTimer. Возможно ли это?
Можно ли вызывать статический метод из 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()
У меня просто неправильный синтаксис, или это не разрешено?
1 ответ:
NSTimer
использует среду выполнения Objective-C для динамического вызова методов. При объявленииstruct
используется среда выполнения Swift, поэтому взаимодействие сNSTimer
невозможно. Структуры отличаются от классов, и вы можете прочитать больше о них здесь.Кроме того, функция
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()