Hay una clase llamada 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
}
}
Y tengo una variedad de Employee
objetos. Lo que ahora necesito es extraer los id
s de todos esos objetos en esa matriz en una nueva matriz.
También encontré esta pregunta similar . Pero está en Objective-C, por lo que se usa valueForKeyPath
para lograr esto.
¿Cómo puedo hacer esto en Swift?
map
hace: transforma una matriz deEmployee
en una matriz deInt
, llena con elid
campo. Lo que equivale a decir "extraer el campo id de todas las instancias deEmployee
y ponerlas en una matriz"ids
de todos losid
valores de la matriz deEmployee
s. Tenga en cuenta que deja intacta la matriz original.array.map( { $0.id })
Swift 5 ofrece muchas formas de obtener una matriz de valores de propiedad de una matriz de objetos similares. Según sus necesidades, puede elegir uno de los siguientes seis ejemplos de código de Playground para resolver su problema.
1.
map
Método de usoCon Swift, los tipos que se ajustan al
Sequence
protocolo tienen unmap(_:)
método. El siguiente código de muestra muestra cómo usarlo:2. Usando
for
bucle3. Usando
while
bucleTenga en cuenta que con Swift, entre bastidores, un
for
bucle es solo unwhile
bucle sobresequence
el iterador de a (consulte IteratorProtocol para obtener más detalles).4. Uso de una
struct
que se ajusta aIteratorProtocol
ySequence
protocolos5. Usando la
Collection
extensión de protocolo yAnyIterator
6. Usando
NSArray
elvalue(forKeyPath:)
método de KVC yTenga en cuenta que este ejemplo requiere
class Employee
heredar deNSObject
.fuente