Cómo get el identificador único de objects en una matriz swift

Tengo una class personalizada como esta:

class Event: NSObject { var eventID: String? var name:String? } 

Ahora tengo una matriz de objects de Event como

 var events = [Event]() var event1 = Event() event1.eventID = "1" event1.name = "Anu" var event2 = Event() event2.eventID = "2" event2.name = "dev" var event3 = Event() event3.eventID = "1" event3.name = "Anu" events.append(event1) events.append(event2) events.append(event3) 

para get un eventID's de array, he escrito un código como este que funciona muy bien:

 func getUniqueIDsFromArrayOfObjects(events:[Event])->NSArray { let arr = events.map { $0.eventID!} let uniquearr:NSMutableArray = NSMutableArray() for obj in arr { if !uniquearr.containsObject(obj) { uniquearr.addObject(obj) } } return uniquearr; } print(getUniqueIDsFromArrayOfObjects(events)) 

Quería saber si hay alguna forma alternativa de get los identificadores únicos de la matriz de objects de manera más eficaz de lo que estoy usando. Puede ser algo mediante el uso de NSPnetworkingicate .

Debido a que una matriz tiene thousands de objects, mi código va a hacer más iteración.

Puede usar un Set para get solo los valores únicos. Sugeriría que tu function devuelva una matriz Swift en lugar de NSArray también.

 func getUniqueIDsFromArrayOfObjects(events:[Event])->[String] { let eventIds = events.map { $0.eventID!} let idset = Set(eventIds) return Array(idset) } 

Un Set es una colección similar a una matriz, que evita duplicates. Tu puedes hacer:

 func getUniqueIDsFromArrayOfObjects(events:[Event])->[Event] { return Array(Set(events.map { $0.eventID! })) } 

Tenga en count que el order de los elementos en un set no está definido, así que si le importa el order de los elementos, debe intentar una solución diferente.

  let uniqueRecords = jobs.networkinguce([], { $0.contains($1) ? $0 : $0 + [$1] })