Подтвердить что ты не робот

EnumerateObjectsUsingBlock в Swift

Я пытаюсь выполнить итерацию по массиву с помощью enumerateObjectsUsingBlock для извлечения данных. Как использовать enumerateObjectsUsingBlock в Swift? Пожалуйста, помогите мне с примером.

4b9b3361

Ответ 1

Фонд

enumerateObjectsUsingBlock: не является методом в массиве, а в NSArray. Если вы хотите использовать его, вам понадобится экземпляр NSArray, а не Array.

import Foundation

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

array.enumerateObjectsUsingBlock({ object, index, stop in
    //your code
})

если у вас есть существующий массив, вы можете применить swift Array к NSArray с помощью as

var cocoaArray = swiftArray as NSArray

или если вы просто import Foundation, компилятор Swift автоматически скроет ваш массив Swift с NSArray, и все методы NSArray станут доступны вам.

Swift 1

или вы можете просто использовать функцию Swift enumerate:

for (index, value) in enumerate(array) {
    // your code
}

Swift 2

В Swift 2 enumerate больше не является свободной функцией, теперь она в расширении протокола!

for (index, value) in array.enumerate() {
    // your code
}

Swift 3

И в Swift 3, enumerate был переименован в enumerated

for (index, value) in array.enumerated() {
    // your code
}

Ответ 2

Новая функция перечисления возвращает кортеж с индексом и значением, поэтому вы можете получить аналогичную функциональность для 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

Я предполагаю, что они не выставили enumerateObjectsUsingBlock, поскольку вы можете реплицировать функциональность с помощью вышеуказанного кода.

EDIT: Анонимная функция разбивала мою игровую площадку, поэтому использовалась встроенная функция. Также добавляется использование стоп-переменной для иллюстративных целей.