Há uma classe chamada 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
}
}
E eu tenho uma série de Employee
objetos. O que eu preciso agora é extrair os id
s de todos os objetos dessa matriz em uma nova matriz.
Eu também encontrei essa pergunta semelhante . Mas está em Objective-C, então é usado valueForKeyPath
para fazer isso.
Como posso fazer isso no Swift?
map
faz - ele transforma um array deEmployee
em um array deInt
, preenchido com oid
campo. O que equivale a dizer "extraia o campo id de todas as instâncias deEmployee
e coloque-os em uma matriz"ids
de todos osid
valores da matriz deEmployee
s. Observe que ele deixa a matriz original intacta.array.map( { $0.id })
O Swift 5 oferece muitas maneiras de obter uma matriz de valores de propriedade a partir de uma matriz de objetos semelhantes. De acordo com suas necessidades, você pode escolher um dos seis seguintes exemplos de código do Playground para resolver seu problema.
1.
map
Método de usoCom o Swift, os tipos que estão em conformidade com o
Sequence
protocolo têm ummap(_:)
método. O código de exemplo a seguir mostra como usá-lo:2. Usando
for
loop3. Usando
while
loopObserve que com o Swift, nos bastidores, um
for
loop é apenas umwhile
loop sobre umsequence
iterador (consulte IteratorProtocol para obter mais detalhes).4. Usando um
struct
que está em conformidade comIteratorProtocol
eSequence
protocolos5. Usando
Collection
extensão de protocolo eAnyIterator
6. Usando
NSArray
ovalue(forKeyPath:)
método KVC e deObserve que este exemplo requer
class Employee
para herdar deNSObject
.fonte