如何使用CNContacts在swift中仅获取手机号码?

R_M*_*ies 6 arrays ios swift cncontact

我有一些代码可以检索用户联系人中的所有电话号码,但只想过滤掉手机号码.目前,我只是通过向数组中添加第一个数字"+"或第二个数字"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)")
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

由于联系人存储在带有"移动"标签的iPhone上,我想知道是否只能将这些数字添加到阵列中.谢谢 :)

bri*_*one 6

检查号码的标签是否像这样移动:

var mobiles = [CNPhoneNumber]()

for num in contact.phoneNumbers {
    let numVal = num.value as! CNPhoneNumber
    if num.label == CNLabelPhoneNumberMobile {
        mobiles.append(numVal)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你有一系列的手机号码给那个人.

  • 不要硬编码"移动"`.使用`CNLabelPhoneNumberMobile`或`CNLabelPhoneNumberiPhone`.但请记住,这不会得到所有手机号码.添加电话号码时,人们可以使用自定义标签.有人可能实际上错误地使用了"home"标签或任何其他可能性.或者用户可以在陆线上使用"移动"标签.最后,无法确定任何给定的号码是否真的是手机号码. (2认同)