我有一系列的角色。

["A","E","I","O","U","Y"]

我应该循环这个数组,对每个字符,启动一个计时器。即:如果当前字母是A,则必须打印A并持续2秒。在A被打印之后,我们需要打印“E”,它应该持续3秒,“I”一秒,“O”四秒,等等。
我想我应该为每个角色创建一个新的计时器,这样:
Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector:
#selector(printCharacter), userInfo: nil, repeats: false)

但我不能在圈内做。
我希望有办法建立一个定时器阵列,然后按顺序发射它们,但这是不可能的。知道吗?

最佳答案

您可以仅使用递归和DispatchQueue来实现这一点。如果你不熟悉递归,那么理解它的一个简单方法是googling it
如果打印持续时间不是线性的,则示例代码如下所示:

var currentIndex = 0
let charactersArray = ["A","B","C","D"]
let durations : [TimeInterval] = [1.0,2.0,3.0,4.0]

func printCharacter(){

    guard currentIndex < charactersArray.count else { return }

    print(charactersArray[currentIndex])

    DispatchQueue.main.asyncAfter(deadline: .now() + durations[currentIndex], execute: {

        currentIndex = currentIndex + 1

        printCharacter()
    })
}

printCharacter()

其中durations数组表示每个字符显示的时间

09-27 01:04