如何创建一个 while 循环来每秒检查其条件?
也许是这样的:
while (isConditionSatisfied){
// wait for 1 second and than check again
}
编辑:系统随机调用此函数
bannerViewDidLoadAd
。如果它在不适当的时间调用它(条件不满足 - 我的应用程序正在执行一些其他动画),我想推迟其实现(只是 UIView 动画),直到满足条件(我的应用程序已完成动画,现在实现应该被处决)。我以为我可以每秒检查一次 while 循环的条件,但正如你们所说......这是一个坏主意。
像这样使用 while 循环实际上会创建一个无限循环。您应该使用 Timer()。
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.loop), userInfo: nil, repeats: true)
然后
@objc
func loop() {
if yourCondition {
// your code here
timer.invalidate()
}
}
确保您使用其他变量声明来声明计时器,这样一旦满足您的条件,它就会失效:
var timer: Timer!
带间隔的快速循环
iOS 10
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
if someCondition {
timer.invalidate()
}
}
*
withTimeInterval
- 秒数
你可以像这样使用 NSTimer
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(yourMethodName) userInfo:nil repeats:YES];
我刚刚组合了一个 Swift NSObject 扩展,可以让你做到这一点。它使用延迟功能让您
wait
直到满足某些条件或您取消它。
https://gist.github.com/d3signerd/795a9dced39cbee056010d5629d9ca06
//等等示例
waitWhile( { [weak self] () -> condition_parameters in
if let weakSelf = self {
return ( conditionMet: `criteria to meet`, cancel: false )
}
else {
return ( conditionMet: false, cancel: true )
}
}, completion: { [weak self] in
// Wait completion code goes here...
})
// 延迟示例
private var cancelableDelayClosure:dispatch_cancelable_closure? = nil
cancelableDelayClosure = delay( 1.0, closure: { () -> () in
// Delay completion code here...
})
cancelDelay( &cancelableDelayClosure )
更新了 swift 代码,
let timer = Timer.scheduledTimer(
timeInterval: 1.0, target: self, selector: #selector(Your_current_vc.yourTask),
userInfo: nil, repeats: true)
func yourTask() {
}