我试图了解Swift如何处理for-in循环。
概述:我们正在遍历NSOutlineView
的行。如果满足条件,我们将展开该项目,这显然会更改outlineView的总行数。
前提条件:OutlineView有5个“根”项。每个项目都有5个子项。
示例
final class anOutlineView: NSOutlineView
{
override func reloadData()
{
super.reloadData()
for i in 0 ..< self.numberOfRows
{
// Assume we expand the item at row 0,which increases
// the overall outlineView row count from 5 to 10.
}
}
}
在这种方法中,循环在i == 4
时停止。我认为那是因为Swift第一次遇到该范围时,它只会评估一次?有没有办法改变这种行为,以便每次像传统的for
循环一样通过循环重新评估条件?
用for
循环替换while
循环显然是可行的,这是一个很好的解决方案。我只是想了解Swift的细微差别,因为这种行为不是我所期望的。在Objective-C中,对for
循环条件进行了每次迭代评估,这是众所周知的性能优化,它避免在循环条件中调用self.property
(除非存在充分的理由,因为它在这种情况。)