从NSTimer调用静态方法。可能吗?

时间:2015-03-27 19:23:54

标签: ios swift nstimer static-methods

是否允许从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()

我只是语法错误,还是不允许?

1 个答案:

答案 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()