我有一个字符数组,例如。
["A","E","I","O","U","Y"]
我应该循环这个数组,并为每个字符启动一个计时器。即:如果当前字母为A,则必须打印A并持续2秒。打印A后,我们需要打印“E”,它应该持续3秒,“我”一秒,“O”四秒等等。
我想我应该为每个角色创建一个新的计时器,这样:
Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector:
#selector(printCharacter), userInfo: nil, repeats: false)
但我不能在循环内完成。
我希望有一种方法可以构建一组计时器,然后按顺序启动它们,但这是不可能的。有什么想法吗?
答案 0 :(得分:3)
您可以使用递归和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数组表示每个字符显示的时间