【问题标题】:Enumerate/Iterate over an array using Blocks and know when it is completed使用块枚举/迭代数组并知道它何时完成
【发布时间】:2014-08-13 11:49:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios arrays swift objective-c-blocks


    【解决方案1】:

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

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

    itemsArray.enumerateObjectsUsingBlock {
        (object, index, stop) -> Void in
    
        // process at most 5 elements:
        if index == 4 {
           stop.memory = true
        }
    }
    

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

    【讨论】:

    • 啊,好的。这就说得通了。我认为块总是异步工作...... ups。
    • @BerndPlontsch:块更像是一段代码(类似于函数,但具有额外的状态,如变量绑定)。块本身同步执行。它可以使用用于dispatch_async()等异步方法。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多