while 循环在 swift 中每秒检查其状态

问题描述 投票:0回答:5

如何创建一个 while 循环来每秒检查其条件?

也许是这样的:

while (isConditionSatisfied){
// wait for 1 second and than check again
}

编辑:系统随机调用此函数

bannerViewDidLoadAd
。如果它在不适当的时间调用它(条件不满足 - 我的应用程序正在执行一些其他动画),我想推迟其实现(只是 UIView 动画),直到满足条件(我的应用程序已完成动画,现在实现应该被处决)。我以为我可以每秒检查一次 while 循环的条件,但正如你们所说......这是一个坏主意。

ios swift while-loop
5个回答
15
投票

像这样使用 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!

8
投票

带间隔的快速循环

iOS 10

Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in   
    if someCondition {
        timer.invalidate()
    }
}

*

withTimeInterval
- 秒数

[iOS 运行循环]


1
投票

你可以像这样使用 NSTimer

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(yourMethodName) userInfo:nil repeats:YES];

1
投票

我刚刚组合了一个 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 )

0
投票

更新了 swift 代码,

let timer = Timer.scheduledTimer(
                timeInterval: 1.0, target: self, selector: #selector(Your_current_vc.yourTask),
                userInfo: nil, repeats: true)


func yourTask() {

}
© www.soinside.com 2019 - 2024. All rights reserved.