iOS 9:获取CNContact国家代码和电话号码
我想从iOS 9上的CNContact获取国家代码和电话号码。我尝试了很多东西,但是找不到方法。 我所获得的最佳结果是印刷:
<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中访问它们? 谢谢!
不幸的是你不能得到他们,因为他们是私人的。
let numberValue = number.value let countryCode = numberValue.valueForKey("countryCode") as? String let digits = numberValue.valueForKey("digits") as? String
这个工作,但如果你在这一行做了什么, 你的应用很可能会被拒绝。
你可以在这里看到所有的好东西。
如果你不打算上传你的应用程序到商店上面的解决scheme是好的,否则我会坚持一种正则expression式知道它可以打破未来:
countryCode=(\w{2}),.*digits=(.+)>$
Objective-C:
[number.value valueForKey:@"countryCode"]
Swift:
number.value.valueForKey("countryCode") as? String
valueForKey
不是私人的,你的应用程序不会被拒绝。
他们两个成员可以通过valueForKey
访问:
let countryCode = number.valueForKey("countryCode") as? String let digits = number.valueForKey("digits") as? String
请注意,由于这两个字段是私有API的一部分,因此不能保证在未来版本的Contacts
框架中,它们不会被删除/replace。
/ *只获取第一个手机号码* /
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!) }
要获得国家代码,你可以使用这个:
(contact.phoneNumbers[0].value ).value(forKey: "countryCode") as! String
在for循环,和键; “数字”是获得完整的电话号码。