Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate through array of objects in Swift?

i have objects

var person1 = Person() person1.name = "Joe" person1.lastName = "Doe" person1.age = 21  var person2 = Person() person2.name = "Julia" person2.lastName = "Ivanova" person2.age = 22  var person3 = Person() person3.name = "Irina" person3.lastName = "Petrova" person3.age = 25  var person9 = Person() person9.name = "Vova" person9.lastName = "Vovin" person9.age = 32  var person10 = Person() person10.name = "Masha" person10.lastName = "Golovanova" person10.age = 20  var person11 = Person() person11.name = "Petra" person11.lastName = "Andreeva" person11.age = 27 

and multi array

var array = [[person1, person2, person3], [person9, person10, person11]] 

how can I iterate through array to get for example a person with name="Masha"

thanks in advance

like image 563
Alexey K Avatar asked Jul 27 '15 11:07

Alexey K


2 Answers

I would try this:

var array:[[Person]] = [[person1, person2, person3], [person9, person10, person11]] /*Casting it like this should keep from getting an error later     and/or having to recast the objects*/  for people in array {  /*This is going to look at each array in arrays,     and call each one 'people' within this loop*/      for person in people {      /*Same thing, this is going to look at each item in the people array        and call each one 'person' within this loop*/          if person.name == "Masha" {             return person         }     } } 
like image 112
Rachel Harvey Avatar answered Sep 21 '22 13:09

Rachel Harvey


An interesting way of solving this would be to leverage the flatMap function of Swift.

var array = [[person1, person2, person3], [person9, person10, person11]]  let flatArray = array.flatMap { $0 } 

flatArray now is [person1, person2, person3, person9, person10, person11] of type Array<Person>.

Then you can iterate on flatArray to find what you want :

for person in flatArray {     if person.name == "Masha" {         // Do something     } } 

You could even go further by using Swift 2.0 because it allows you to put a where clause in the for :

for person in flatArray where person.name == "Masha" {     // Do something } 
like image 27
Fantattitude Avatar answered Sep 22 '22 13:09

Fantattitude