Swift 我可以避免子类化NSObject以重复调用方法吗?

Swift 我可以避免子类化NSObject以重复调用方法吗?,swift,Swift,我试图实现一个纯swift类。每60秒需要调用一个类方法。在Objective-C中,我会使用一个NSTimer,但是如果可以的话,我希望它是纯Swift的,而不需要NSObject子类 所以我想做这样的事情: func autoDelete() { .... code here // call myself in 60 seconds delay(60, { () -> () in self.autoDelete() }) } fun

我试图实现一个纯swift类。每60秒需要调用一个类方法。在Objective-C中,我会使用一个NSTimer,但是如果可以的话,我希望它是纯Swift的,而不需要NSObject子类

所以我想做这样的事情:

func autoDelete() {
     .... code here

    // call myself in 60 seconds
    delay(60, { () -> () in
        self.autoDelete()
    })
}

func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
}

我担心的是,由于这是一种递归调用,它最终会溢出堆栈。这会发生吗?我的选择是什么?子类化NSObject并使用NSTimer是我唯一可行的选项吗?

您的代码不会导致堆栈溢出,因为
dispatch\u after()
仅 分派块以供以后执行,然后返回

您的解决方案的一个可能的缺点是,它每天启动一个新的计时器 60秒。计时器不是100%精确的,因此微小的差异可能会累积

一个更好的解决方案(如果您想避免
NSTimer
)是使用分派 计时器,如中所述 对