随时间延迟从数组中调用功能



假设我有一系列函数:

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
    }
}

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

初始化计数和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")
}

希望这对您有用。

我认为这会起作用。按照以下步骤。

  • 将变量计数声明为零。
  • 安排时间间隔2.5的计时器,然后重复为true。
  • 现在,从数组中调用索引的数组中的函数为计时器回调块中的计数。
  • 检查计数是否小于array.count。
  • 增加计数。
  • 否则停止计时器。

我做了一个函数以函数循环可能编码不好,但是...它有效

        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()
    }

    }

最新更新