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? Спасибо!
Ответы
Ответ 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 цикл и ключ; "цифры" - это полный номер телефона.