在Swift中以随机间隔定期调用函数

时间:2016-04-16 11:40:54

标签: ios swift swift2 nstimer

我试图在它们之间以随机间隔调用一个函数10次。

我怎样才能做到这一点?

我确实提出了一种方法,但是非常难看。它看起来像这样:

    var counter = 0
    NSTimer.scheduledTimerWithTimeInterval(arc4random_uniform(4)+2, target: self, selector: Selector("createNewTimer"), userInfo: nil, repeats: false)

    func createNewTimer(){
    // PERFORM STUFF YOU NEED TO
     counter++

     if counter <= 10{
        NSTimer.scheduledTimerWithTimeInterval(arc4random_uniform(4)+2, target: self, selector: Selector("createNewTimer"), userInfo: nil, repeats: false)
     }
    }

是否有更好的方式以随机间隔调用函数?

2 个答案:

答案 0 :(得分:2)

在操场上试试这个。希望它有所帮助:

    func after(delay: Double, block: () -> Void) {

        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))

        dispatch_after(delayTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
            block()
        }
    }

    func repeatBlock(counter: Int = 1, times: Int, block: () -> Void) {

        after(Double(arc4random_uniform(4) + 2)) {

            block()

            if counter < times {
                repeatBlock(counter + 1, times: times, block: block)
            }
        }
    }

    //client's code
    var counter = 0
    repeatBlock(times: 10) {
        //your code here
        print(NSDate())
    }
    sleep(100)

答案 1 :(得分:-1)

如果你需要一个随机的间隔,那么我担心,上面是最好的解决方案。如果时间间隔相同,则可以将其设置为repeats:true。但不是你的情况。