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.
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.
I write the extension of CollectionType.
Any way to stop a block literal in swift
func forEach(body: ((Self.Generator.Element, Int, inout Bool) -> Void)) {
var stop = false
let enumerate = self.enumerate()
for (index,value) in enumerate {
if stop { break }
body(value,index,&stop)
}
}
The existing answers can achieve what has been asked in the question. Also, you can write an extension to Array class and add similar method as -
extension Array{
func enumerateObject(_ block : (Any, Int,inout Bool)-> Void){
var stop = false
for (index, aValue) in self.enumerated(){
block(aValue,index,&stop);
}
}
//uses
let numArr = [2,4,7,8,9];
numArr.enumerateObject { (aValue, index, stop) in
let value = aValue as! Int
if !stop{
print("At index \(index) value \(value)");
}
if value == 7{
print(value);
stop = true;
}
}
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.
or you can just use Swift's enumerate
function:
for (index, value) in enumerate(array) {
// your code
}
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
}
And in Swift 3, enumerate
was renamed to enumerated
for (index, value) in array.enumerated() {
// your code
}