Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

enumerateObjectsUsingBlock in Swift

Tags:

swift

I am trying to iterate through an array using enumerateObjectsUsingBlock to fetch data. How to use enumerateObjectsUsingBlock in Swift ? Please help me with an example.

like image 712
Abhishek Avatar asked Jun 09 '14 12:06

Abhishek


People also ask

What is enumerated () in Swift?

enumerated()Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence.

Can you use enumerate on an array?

There several ways to loop through an array in Swift, but using the enumerated() method is one of my favorites because it iterates over each of the items while also telling you the items's position in the array.


2 Answers

Foundation

enumerateObjectsUsingBlock: is not a method on Array but on NSArray. If you want to use it you'll need an instance of NSArray rather than Array.

import Foundation  var array: NSArray = ["Some", "strings", "in", "an", "array"]  array.enumerateObjectsUsingBlock({ object, index, stop in     //your code }) 

if you have an existing array, you can cast a swift Array to an NSArray using as

var cocoaArray = swiftArray as NSArray 

or if you simply import Foundation the Swift compiler will automatically bridge your Swift array to an NSArray and all the NSArray methods will become available for you.

Swift 1

or you can just use Swift's enumerate function:

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

Swift 2

In Swift 2, enumerate is no longer a free function, now it's in a protocol extension!

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

Swift 3

And in Swift 3, enumerate was renamed to enumerated

for (index, value) in array.enumerated() {     // your code } 
like image 137
Lance Avatar answered Nov 08 '22 11:11

Lance


The new enumerate function returns a tuple with indexer and value so you can get similar functionality to 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 

I imagine they haven't exposed enumerateObjectsUsingBlock as you can replicate the functionality with the above code.

EDIT: Anonymous function was crashing my playground so used an inline function. Also added using stop variable for illustrative purposes.

like image 26
richardpj Avatar answered Nov 08 '22 09:11

richardpj