使用Blocks枚举/迭代数组并知道它何时完成

时间:2014-08-13 11:49:06

标签: ios arrays swift objective-c-blocks

我想在Swift中遍历数组,我需要知道何时到达最后一项。我正在使用 enumerateObjectsUsingBlock 。由于没有可选的完成块(如某些CoreAnimation方法),我假设 stop 参数表示结束点 - 这是正确的吗?

    itemsArray.enumerateObjectsUsingBlock {
        (object, index, stop) -> Void in
        self.displayedItems.addObject(object as SpecialItem)
        if stop == true {
           println("the end.")
        }
    }

停止似乎属于 UnsafeMutablePointer 类型。因此,我不能简单地测试它是真/假或零。我怎么知道枚举何时完成?

2 个答案:

答案 0 :(得分:4)

enumerateObjectsUsingBlock同步执行 。枚举完成 当方法返回时。

stop是布尔值的引用,可以将其设置为true以停止进一步处理, 例如:

itemsArray.enumerateObjectsUsingBlock {
    (object, index, stop) -> Void in

    // process at most 5 elements:
    if index == 4 {
       stop.memory = true
    }
}

在块内测试if stop == true没有意义。

答案 1 :(得分:1)

获取块之前的计数,然后将索引与计数进行比较,以确定您何时处于最后一项。

如果您只想在枚举完成后执行代码,只需将代码紧跟在块代码之后。这个块不是异步的。

注意:Stop是一个变量,可以在块中设置以提前终止枚举。请参阅文档。