Swift 获取数组中的所有联系人电话号码

Swift 获取数组中的所有联系人电话号码,swift,xcode,Swift,Xcode,我获取了所有联系人信息,如下所示。现在我刚从联系人那里拿到一个电话号码问题是如何在字符串数组中获取联系人的所有电话号码以使用它? 存储数据: class ContactStruct : NSObject { let identifier : String let thumbnailImageData : UIImage? let givenName : String let familyName : String l

我获取了所有联系人信息,如下所示。现在我刚从联系人那里拿到一个电话号码问题是如何在字符串数组中获取联系人的所有电话号码以使用它?

存储数据:

class ContactStruct : NSObject {
        let identifier : String
        let thumbnailImageData : UIImage?
        let givenName : String
        let familyName : String
        let phoneNumbers : String
        let emailAddresses : String

        init(identi:String,img:UIImage?,name:String,family:String,phone:String,email:String) {
            self.identifier = identi
            self.thumbnailImageData = img
            self.givenName = name
            self.familyName = family
            self.phoneNumbers = phone
            self.emailAddresses = email
        }
获取方法:

class func generateModelArray() -> [ContactStruct]{
     let contactStore = CNContactStore()

     var contactsData = [ContactStruct]()

     let key = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactImageDataKey,CNContactThumbnailImageDataKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNLabelPhoneNumberMobile] as [CNKeyDescriptor]
     let request = CNContactFetchRequest(keysToFetch: key)
     try? contactStore.enumerateContacts(with: request, usingBlock: { (contact, stoppingPointer) in
         let givenName = contact.givenName
         let familyName = contact.familyName
         let emailAddress = contact.emailAddresses.first?.value ?? ""
         let phoneNumber = contact.phoneNumbers.first?.value.stringValue ?? ""
         let identifier = contact.identifier
        var image : UIImage?
         if contact.thumbnailImageData != nil{
             image = UIImage(data: contact.thumbnailImageData!)!
         }
         contactsData.append(ContactStruct(identi: identifier, img: image, name: givenName, family: familyName, phone: phoneNumber, email: emailAddress as String))
     })
     return contactsData
 }
你可以用这个

func extractNumber(data: [ContactStruct]) ->[String] 
{
     var arrNumbers = [String]()
     for number in data
          {
              arrNumbers.append(number.phoneNumber)
          }
     return arrNumbers
}
然后像这样使用:

let arrayNumbers = extractNumber(data: contactsData)
dump(arrayNumbers) //<- this line prints on console
让ArrayNumber=extractNumber(数据:contactsData)

dump(arrayNumbers)//首先,您的
电话号码
电子邮件地址
变量应该是字符串数组,而不是字符串,因为您可以有多个

我会把它们做成一本字典,像这样
[String:String]
——以后再详细介绍

class ContactStruct: NSObject {
        let identifier: String
        let thumbnailImageData: UIImage?
        let givenName: String
        let familyName: String
        let phoneNumbers: [String:String] // <----- the new dictionaries
        let emailAddresses: [String:String] // <--

        init(identifier: String, img: UIImage?, name: String, family: String, phones: [String:String], emails: [String:String]) {
            self.identifier = identifier
            self.thumbnailImageData = img
            self.givenName = name
            self.familyName = family
            self.phoneNumbers = phones
            self.emailAddresses = emails
        }
您可以随时添加自己的风味和风格。 我将辞去为您编写
getEmailAddressesFromContact
函数的工作:)

因此,您的最终
generateModelArray
类可能如下所示-

class func generateModelArray() -> [ContactStruct]{
     let contactStore = CNContactStore()

     var contactsData = [ContactStruct]()

     let key = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactImageDataKey,CNContactThumbnailImageDataKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNLabelPhoneNumberMobile] as [CNKeyDescriptor]
     let request = CNContactFetchRequest(keysToFetch: key)
     try? contactStore.enumerateContacts(with: request, usingBlock: { (contact, stoppingPointer) in
         let givenName = contact.givenName
         let familyName = contact.familyName
         let emailAddress = getEmailAddressesFromContact(contact) // <--- only changes
         let phoneNumber = getPhoneNumbersFromContact(contact) // <--- are here
         let identifier = contact.identifier
        var image : UIImage?
         if contact.thumbnailImageData != nil{
             image = UIImage(data: contact.thumbnailImageData!)!
         }
         contactsData.append(ContactStruct(identifier: identifier, img: image, name: givenName, family: familyName, phone: phoneNumber, email: emailAddress))
     })
     return contactsData
 }
class func generateModelArray()->[ContactStruct]{
让contactStore=CNContactStore()
var contactsData=[ContactStruct]()
将key=[CNContactGivenNameKey、CNContactFamilyNameKey、CNContactImageDataKey、CNContactThumbnailImageDataKey、CNContactPhoneNumberKey、CNContactEmailAddressKey、CNLabelPhoneNumberMobile]设为[CNKeyDescriptor]
let request=CNContactFetchRequest(keystefetch:key)
try?contactStore.在中枚举联系人(with:request,usingBlock:{(contact,stoppingPointer))
让givenName=contact.givenName
让familyName=contact.familyName

让emailAddress=getEmailAddressesFromContact(contact)//如何在现有方法中使用您的方式?在您的函数中添加var arrNumbers=[String](),并更改此行contactsData.append以获取此arrNumbers。append(phoneNumber)和此的返回行,返回arrNumbers,最后是此->[String]的此->[ContactStruct]
class func generateModelArray() -> [ContactStruct]{
     let contactStore = CNContactStore()

     var contactsData = [ContactStruct]()

     let key = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactImageDataKey,CNContactThumbnailImageDataKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNLabelPhoneNumberMobile] as [CNKeyDescriptor]
     let request = CNContactFetchRequest(keysToFetch: key)
     try? contactStore.enumerateContacts(with: request, usingBlock: { (contact, stoppingPointer) in
         let givenName = contact.givenName
         let familyName = contact.familyName
         let emailAddress = getEmailAddressesFromContact(contact) // <--- only changes
         let phoneNumber = getPhoneNumbersFromContact(contact) // <--- are here
         let identifier = contact.identifier
        var image : UIImage?
         if contact.thumbnailImageData != nil{
             image = UIImage(data: contact.thumbnailImageData!)!
         }
         contactsData.append(ContactStruct(identifier: identifier, img: image, name: givenName, family: familyName, phone: phoneNumber, email: emailAddress))
     })
     return contactsData
 }