Swift 从iOS 9中的联系人框架访问电话号码

Swift 从iOS 9中的联系人框架访问电话号码,swift,ios9,Swift,Ios9,我无法打开CNLabeledValue以获取电话号码。这是我的代码(Swift),我现在得到的是。我只需要访问数字值,所以我正在尝试在result.phoneNumbers{}中的中打印它 lazy var contacts: [CNContact] = { let contactStore = CNContactStore() let keysToFetch = [ CNContactFormatter.descriptorForRequ

我无法打开
CNLabeledValue
以获取电话号码。这是我的代码(Swift),我现在得到的是
。我只需要访问
数字
值,所以我正在尝试在result.phoneNumbers{}中的
中打印它

lazy var contacts: [CNContact] = {
        let contactStore = CNContactStore()
        let keysToFetch = [
            CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),
            CNContactPhoneNumbersKey]

        // Get all the containers
        var allContainers: [CNContainer] = []
        do {
            allContainers = try contactStore.containersMatchingPredicate(nil)
        } catch {
            print("Error fetching containers")
        }

        var results: [CNContact] = []

        // Iterate all containers and append their contacts to our results array
        for container in allContainers {
            let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier)

            do {
                let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: keysToFetch)
                for result in containerResults {

                    for number in result.phoneNumbers {

                        // WHAT SHOULD I PRINT HERE?????
                        print(number.value) 
                    }

                }
                results.appendContentsOf(containerResults)
            } catch {
                print("Error fetching results for container")
            }
        }

        return results
    }()

CNPhoneNumber
的属性
stringValue
是格式化的数字。如果您不想使用诸如“-”、“(”或“)”之类的符号,您只需要进行一些进一步的字符串装饰

应打印(即默认联系人Anna Haro):首页555-522-8243

然后,您可以按照您想要的方式格式化“stringValue”

for number in result.phoneNumbers {
    guard let numberValue = number.value as? CNPhoneNumber else {
        continue
    }
    print(numberValue)
    print(String(numberValue.stringValue.characters.filter({ !["-", "(", ")"].contains($0) })))
}
if contact.isKeyAvailable(CNContactPhoneNumbersKey) {
                for phoneNumber in contact.phoneNumbers {
                    let label = CNLabeledValue.localizedStringForLabel(phoneNumber.label)

                    let phone = phoneNumber.value as! CNPhoneNumber
                        print(" \(label) \(phone.stringValue)")
                }
            }