从具有时间延迟的数组调用函数

时间:2017-12-14 02:36:38

标签: swift

假设我有这个函数数组:

lazy var funcArray = [firstFunc, secondFunc, thirdFunc, ....n+Func, ...Inifinit number of Func........]

你怎么会一个接一个地叫他们2.5秒延迟?

我试过没有成功的很多事情,包括这个循环:

while n < funcArray.count {
    funcArray[n]()

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) {
        n = n +1
    }
}

3 个答案:

答案 0 :(得分:0)

我认为这会奏效。请按照以下步骤操作。

  • 将变量计数声明为零。
  • 安排时间间隔为2.5的计时器,并重复为真。
  • 现在从定时回调块内的index作为count的数组中调用函数。
  • 检查计数是否小于array.count。
  • 增加点数。
  • 否则停止计时器。

答案 1 :(得分:0)

我做了一个函数循环函数 可能是糟糕的编码,但......它的工作原理

        n = 0            

       self.funcArray[n]()

        n = n + 1

        timerAction()

func timerAction() {



    let when = DispatchTime.now() + 2.5
    DispatchQueue.main.asyncAfter(deadline: when) {
    self.funcArray[self.n]()


    self.n = self.n + 1

        if self.n < self.funcArray.count {

    self.timerAction2()

        }

    }

}

func timerAction2() {



    let when = DispatchTime.now() + 2.5
    DispatchQueue.main.asyncAfter(deadline: when) {
        self.funcArray[self.n]()
    }

    if self.n < self.funcArray.count {

        self.timerAction()

    }



    }

答案 2 :(得分:0)

我写小代码以便更好地理解。

初始化count和funcTimer变量并创建静态函数数组。

var count:Int = 0
var funcTimer = Timer()
let funcArray:Array = [somefunc(),somefunc(),somefunc()]

之后在适当的地方添加这些行

funcTimer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: (#selector(ViewController.scheduleArrayFunctions)), userInfo: nil, repeats: true)

@objc func scheduleArrayFunctions(funcarray:[ String])
{
    if count < self.funcArray.count {

        //this if is interesting checking both static function when it check it call the somefunc method
        if self.funcArray[count] == ViewController.somefunc(){
            print("equel")
        }
        self.count += 1
    }
    else
    {
       funcTimer.invalidate()
    }

}

func somefunc()
{
    print("hello world")
}

希望这对你有用。