arrays - 循环中的多个计时器

标签 arrays swift loops timer

我有一个字符数组,例如。

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

我应该循环这个数组,并为每个字符启动一个计时器。即:如果当前字母是A,则必须打印A并持续2秒。打印 A 后,我们需要打印“E”,它应该持续 3 秒,“I”1 秒,“O”4 秒,等等。

我想我应该为每个角色创建一个新的计时器,这样:

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 数组表示每个字符显示的时间

关于arrays - 循环中的多个计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907756/

相关文章:

php - 检查数据库查询中的数组中是否存在值

Javascript - 使用数组作为函数的参数并在创建新原型(prototype)对象时更改值

java - 仅在声明最后一个数组时出现的神秘错误

ios - 照片框架和可重用的 UICollectionViewCell

Java和sql循环优化

php - 如何根据值的实例数对数组进行排序?

ios - Swift 转换,CGFloat 到 Integer

swift - 旋转手势产生不需要的旋转

c - 使用循环计算骰子扑克结果

javascript - 迭代不同大小的网格来播放康威生命游戏的音频