【发布时间】:2023-03-14 19:37:01
【问题描述】:
我是 swift 编程的新手,我不知道如何定期调用方法。我有一个用于服务调用的演示应用程序,但我不知道如何定期调用它。
【问题讨论】:
我是 swift 编程的新手,我不知道如何定期调用方法。我有一个用于服务调用的演示应用程序,但我不知道如何定期调用它。
【问题讨论】:
你可以创建一个 NSTimer() 的对象,并像这样在确定的时间间隔内调用一个函数:
var updateTimer = NSTimer.scheduledTimerWithTimeInterval(15.0, target: self, selector: "callFunction", userInfo: nil, repeats: true)
这将每 15 秒调用一次 callFunction()。
func callFunction(){
print("function called")
}
【讨论】:
这是一个带有启动和停止功能的简单示例:
private let kTimeoutInSeconds:NSTimeInterval = 60
private var timer: NSTimer?
func startFetching() {
self.timer = NSTimer.scheduledTimerWithTimeInterval(kTimeoutInSeconds,
target:self,
selector:Selector("fetch"),
userInfo:nil,
repeats:true)
}
func stopFetching() {
self.timer!.invalidate()
}
func fetch() {
println("Fetch called!")
}
如果您收到unrecognized selector 异常,请确保您的类继承自 NSObject,否则计时器的选择器将找不到该函数!
【讨论】:
带块的计时器变体(iOS 10、Swift 4)
let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { (timer) in
print("I am called every 5 seconds")
}
别忘了调用invalidate方法
timer.invalidate()
GCD 方法(随着时间的推移会变得有点晚)
func repeatMeWithGCD() {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
print("I am called every 5 seconds")
self.repeatMeWithGCD()//recursive call
}
}
不要忘记创建返回条件以防止stackoverflow错误
【讨论】: