Есть класс под названием Employee
.
class Employee {
var id: Int
var firstName: String
var lastName: String
var dateOfBirth: NSDate?
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
И у меня есть массив Employee
объектов. Теперь мне нужно извлечь id
s всех этих объектов в этом массиве в новый массив.
Я тоже нашел этот похожий вопрос . Но он находится в Objective-C, поэтому используется valueForKeyPath
для этого.
Как я могу это сделать в Swift?
map
делает - он преобразует массивEmployee
в массивInt
, заполненныйid
полем. Это эквивалентно высказыванию «извлеките поле id из всех экземпляровEmployee
и поместите их в массив»ids
всеid
значения из массиваEmployee
s. Обратите внимание: он оставляет без изменений исходный массив.array.map( { $0.id })
Swift 5 предлагает множество способов получить массив значений свойств из массива похожих объектов. В соответствии с вашими потребностями вы можете выбрать один из шести следующих примеров кода Playground для решения вашей проблемы.
1. Использование
map
методаВ Swift типы, соответствующие
Sequence
протоколу, имеютmap(_:)
метод. В следующем примере кода показано, как его использовать:2. Использование
for
цикла3. Использование
while
циклаОбратите внимание, что в Swift за кулисами
for
цикл - это простоwhile
цикл надsequence
итератором (подробнее см. IteratorProtocol ).4. Использование ,
struct
которое соответствуетIteratorProtocol
иSequence
протоколов5. Использование
Collection
расширения протокола иAnyIterator
6. Использование КВЦ и
NSArray
«Svalue(forKeyPath:)
методОбратите внимание, что в этом примере требуется
class Employee
наследование отNSObject
.источник