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
}