How do I get an array of the property of a certain class from an array of that class?

I suspect there must be a way to retrieve a certain property of all the objects in an array, in the format of:


let records: [CKRecord]

let recordIDs: [CKRecordID] = records.someMethod( (CKRecord)->CKRecord.ID) )


So that I get an array of CKRecord.ID from an array of CKRecord.


Is there such a method of the Array class like that?

Accepted Reply

You don't tell how you defined CKRecord, but I guess it contains at least


var iD: CKRecordID // Note that a property should start with lowercase


Did you look at using map ?


So, the code I tested is as follows:

typealias CKRecordID = String

struct CKRecord {
    var iD: CKRecordID // Note that a property should start with lowercase
}

let record1 = CKRecord(iD: "1")
let record2 = CKRecord(iD: "2")
let record3 = CKRecord(iD: "3")

let records: [CKRecord] = [record1, record2, record3]

let recordIDs: [CKRecordID] = records.map( { (record: CKRecord) -> CKRecordID in
    let id = record.iD
    return id
} )

print(recordIDs)



you can use a much more compact map closure:


let recordIDs: [CKRecordID] = records.map { record in record.iD }

Replies

You don't tell how you defined CKRecord, but I guess it contains at least


var iD: CKRecordID // Note that a property should start with lowercase


Did you look at using map ?


So, the code I tested is as follows:

typealias CKRecordID = String

struct CKRecord {
    var iD: CKRecordID // Note that a property should start with lowercase
}

let record1 = CKRecord(iD: "1")
let record2 = CKRecord(iD: "2")
let record3 = CKRecord(iD: "3")

let records: [CKRecord] = [record1, record2, record3]

let recordIDs: [CKRecordID] = records.map( { (record: CKRecord) -> CKRecordID in
    let id = record.iD
    return id
} )

print(recordIDs)



you can use a much more compact map closure:


let recordIDs: [CKRecordID] = records.map { record in record.iD }

Thank you.