从 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()