我有一些代码可以检索用户联系人中的所有电话号码,但是我只想过滤掉移动号码。目前,我只是将第一个数字"+“或第二个数字"7”添加到数组中,如下所示:
func findContacts () -> [CNContact]{
let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),CNContactPhoneNumbersKey]
let fetchRequest: CNContactFetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)
var contacts = [CNContact]()
CNContact.localizedStringForKey(CNLabelPhoneNumberiPhone)
fetchRequest.mutableObjects = false
fetchRequest.unifyResults = true
fetchRequest.sortOrder = .UserDefault
let contactStoreID = CNContactStore().defaultContainerIdentifier()
do {
try CNContactStore( ).enumerateContactsWithFetchRequest(fetchRequest) { (let contact, let stop) -> Void in
if contact.phoneNumbers.count > 0 {
contacts.append(contact)
}
if (contact.isKeyAvailable(CNContactPhoneNumbersKey)) {
for phoneNumber:CNLabeledValue in contact.phoneNumbers {
let number = phoneNumber.value as! CNPhoneNumber
print(number.stringValue)
let index = number.stringValue.startIndex.advancedBy(1)
let indexPlus = number.stringValue.startIndex.advancedBy(0)
if number.stringValue[index] == Character(String(7)) || number.stringValue[indexPlus] == Character("+"){
self.allNumbers.append("\(number.stringValue)")
}
}
}
}
由于联系人存储在带有“移动”标签的iPhone上,我想知道是否只能将这些数字添加到数组中。谢谢:)
发布于 2016-05-04 22:31:49
检查号码的标签是否像这样移动:
var mobiles = [CNPhoneNumber]()
for num in contact.phoneNumbers {
let numVal = num.value as! CNPhoneNumber
if num.label == CNLabelPhoneNumberMobile {
mobiles.append(numVal)
}
}
然后你有一系列的手机号码给那个人。
发布于 2017-02-14 03:03:11
这篇文章中提到了一种更好的方法,您可以在这里使用flatMap
和contains
。Swift nested filter optimization?
发布于 2017-02-23 04:40:27
更多访问者的另一种方法:
for con in contacts
{
for num in con.phoneNumbers
{
if num.label == "_$!<Mobile>!$_"
{
self.contactNames.append(con.givenName)
self.contactNums.append(num.value.stringValue)
break
}
else
{
continue
}
}
}
https://stackoverflow.com/questions/37039103
复制相似问题