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循环,和键; “数字”是获得完整的电话号码。