swift中的enumerateObjectsUsingBlock

Abh*_*hek 29 swift

我试图使用enumerateObjectsUsingBlock迭代数组来获取数据.如何在Swift中使用enumerateObjectsUsingBlock?请帮我举个例子.

Lan*_*nce 55

基础

enumerateObjectsUsingBlock:不是Array上的方法,而是NSArray上的方法.如果你想使用它,你需要一个NSArray而不是Array的实例.

import Foundation

var array: NSArray = ["Some", "strings", "in", "an", "array"]

array.enumerateObjectsUsingBlock({ object, index, stop in
    //your code
})
Run Code Online (Sandbox Code Playgroud)

如果你有一个现有的数组,你可以将swift Array转换为NSArray使用as

var cocoaArray = swiftArray as NSArray
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是import FoundationSwift编译器将自动将您的Swift数组桥接到NSArray,并且所有NSArray方法都可供您使用.

斯威夫特1

或者您可以使用Swift的enumerate功能:

for (index, value) in enumerate(array) {
    // your code
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

在Swift 2中,enumerate不再是一个自由函数,现在它在协议扩展中!

for (index, value) in array.enumerate() {
    // your code
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

在Swift 3中,enumerate被重命名为enumerated

for (index, value) in array.enumerated() {
    // your code
}
Run Code Online (Sandbox Code Playgroud)


ric*_*dpj 9

新的枚举函数返回带有索引器和值的元组,因此您可以获得与enumerateObjectsUsingBlock类似的功能.

func myBlock (index: Int, value: Int, inout stop: Bool) -> Void {
    println("Index: \(index) Value: \(value)")
    if index == 3 {
        stop = true
    }
}

var array = [1,2,3,4,5]

for (index, value) in enumerate(array) {
    var stop = false;
    myBlock(index, value, &stop)
    if stop  {
        break;
    }
}

//Output...
//Index: 0 Value: 1
//Index: 1 Value: 2
//Index: 2 Value: 3
//Index: 3 Value: 4
Run Code Online (Sandbox Code Playgroud)

我想他们没有公开enumerateObjectsUsingBlock,因为您可以使用上面的代码复制功能.

编辑:匿名函数崩溃我的操场,所以使用内联函数.还使用stop变量添加以用于说明目的.