Подтвердить что ты не робот

IOS 9: получите код страны CNContact и номер телефона

Я хочу получить код страны и номер телефона от CNContact на iOS 9. Я пробовал много вещей, но не мог найти способ. Лучший результат, который я достиг, - печать:

<CNPhoneNumber: 0x7f886389a140: countryCode=us, digits=5555648583>

Вот как я это делаю:

func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
    print(contact.phoneNumbers.count)
    for number: CNLabeledValue in contact.phoneNumbers {
        print(number.value)
    }
}

То, что я хочу, это значения для CountryCode и цифр. Любые идеи о доступе к ним в Swift? Спасибо!

4b9b3361

Ответ 1

К сожалению, вы не можете получить их, поскольку они являются частными.

let numberValue = number.value

let countryCode = numberValue.valueForKey("countryCode") as? String
let digits = numberValue.valueForKey("digits") as? String

Это работает, но если вы сделаете что-то в этих строках , ваше приложение, скорее всего, будет отклонено.

Вы можете увидеть все приятные вещи, которые вы могли бы использовать здесь.

Если вы не планируете загружать свое приложение в хранилище, то вышеприведенное решение в порядке, иначе я буду придерживаться своего регулярного выражения, зная, что он может сломаться в будущем:

countryCode=(\w{2}),.*digits=(.+)>$

Ответ 2

Objective-C:

[number.value valueForKey:@"countryCode"]

Swift:

number.value.valueForKey("countryCode") as? String

valueForKey не является приватным, и ваше приложение не будет отклонено.

Ответ 3

Доступ к двум элементам можно получить через valueForKey:

let countryCode = number.valueForKey("countryCode") as? String
let digits = number.valueForKey("digits") as? String

Обратите внимание, что из-за того, что эти два поля являются частным API, нет гарантии, что в будущих версиях структуры Contacts они не будут удалены/заменены.

Ответ 4

/* Получить только первый номер мобильного телефона */

    let MobNumVar = (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String
    print(MobNumVar)

/* Получить весь номер мобильного телефона */

    for ContctNumVar: CNLabeledValue in contact.phoneNumbers
    {
        let MobNumVar  = (ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? String
        print(MobNumVar!)
    }

/* Получить номер мобильного телефона с кодом страны мобильной связи */

    for ContctNumVar: CNLabeledValue in contact.phoneNumbers
    {
        let FulMobNumVar  = ContctNumVar.value as! CNPhoneNumber
        let MccNamVar = FulMobNumVar.valueForKey("countryCode") as? String
        let MobNumVar = FulMobNumVar.valueForKey("digits") as? String

        print(MccNamVar!)
        print(MobNumVar!)
    }

Ответ 5

Чтобы получить код страны, вы можете использовать это:

(contact.phoneNumbers[0].value ).value(forKey: "countryCode") as! String

in for цикл и ключ; "цифры" - это полный номер телефона.