我有这个阵列:

var currentTouches = [UITouch]()

在任何时候,它都可能含有0-5UITouches。我想检查每个索引,如果内容存在,就做一些事情。
但是我找不到一个不出错的检查方法。问题似乎是,UITouch不是可选的,所以我不能只问它是否nil
我该怎么办?我试着让它成为一个可选的,但这使得我的其他代码不寻常。当然,必须有一个简单的解决办法。

最佳答案

currentTouches的有效指标仅为currentTouches.indices。因此,要检查索引i是否有效,可以检查if currentTouches.indices.contains(i)。您还可以检查if i < currentTouches.count(假设您已经知道i >= 0)。
一个简单的方法是循环使用有效的索引并依次处理每个索引:

for index in currentTouches.indices {
    // handle value at index
}

或者如果你不在乎指数:
for touch in currentTouches {
    // handle touch
}

更好的方法是使用enumerated()来给您一个包含索引和值的元组:
for (index, touch) in currentTouches.enumerated() {
    // handle touch at index
}

09-11 20:02