我想从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中访问它们?谢谢!
答案 0 :(得分:9)
很遗憾,由于他们是私人的,因此无法获取这些内容。
let numberValue = number.value
let countryCode = numberValue.valueForKey("countryCode") as? String
let digits = numberValue.valueForKey("digits") as? String
这样可行,但如果您在此行中执行某些操作您的应用很可能会遭到拒绝。
你可以看到所有可以使用的好东西here。
如果您没有计划将应用程序上传到商店,那么上面的解决方案就可以了,否则我会坚持使用某种类型的正则表达式,因为它知道将来会破坏:
countryCode=(\w{2}),.*digits=(.+)>$
答案 1 :(得分:4)
number
> db.orderA.aggregate([
// combine orderA and orderB though `order_id`
{$lookup: {
from: 'orderB',
localField: 'order_id',
foreignField: 'order_id',
as: 'order'}},
// unwind the `order` array
{$unwind: '$order'},
// compare the `remind_number` and `number`
{$project: { 'order_id':1,
number: 1,
order: 1,
cmpvalue: {$cmp: ['$order.remind_number', '$number']}}},
// filter the order which `remind_number` greater then `number`
{$match: {cmpvalue: {$gt: 0}}},
// only include the fields of orderA
{$project: {order_id: 1, number: 1, }}
]);
Objective-C:
[number.value valueForKey:@"countryCode"]
Swift:
不是私密的,您的应用不会被拒绝。
答案 2 :(得分:0)
他们可以通过valueForKey
访问两个成员:
let countryCode = number.valueForKey("countryCode") as? String
let digits = number.valueForKey("digits") as? String
请注意,由于这两个字段是私有API的一部分,因此无法保证在Contacts
框架的未来版本中不会删除/替换它们。
答案 3 :(得分:0)
/ *只获取第一个手机号码* /
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!)
}
答案 4 :(得分:-1)
fetch contacts without country code, spaces ,braces and dash from contacts book with contact picker and textfield both
*********** without country code
import ContactsUI
var phoneString:String!
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let numbers = contact.phoneNumbers.first
let a = (numbers?.value)?.stringValue ?? ""
let myString = a
let formattedString = myString.replacingOccurrences(of: " ", with: "")
let newFormattedString = formattedString.replacingOccurrences(of: "(", with: "")
let formatstring = newFormattedString.replacingOccurrences(of: ")", with: "")
let last10 = formatstring.replacingOccurrences(of: "-", with: "")
phoneString = String(last10.suffix(10))
phonetextField.text = phoneString
}
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
self.dismiss(animated: true, completion: nil)
}
@IBAction func inviteButton(_ sender : Any)
{
if phoneString == nil{
phoneString = phonetextField.text! //fetching from phonetextfield
Phone = phoneString
}
else {
Phone = phoneString //fetching from phone contacts
}
}
答案 5 :(得分:-2)
要获取国家/地区代码,您可以使用此代码:
(contact.phoneNumbers[0].value ).value(forKey: "countryCode") as! String
在for循环中,键; &#34;数字&#34;是获得完整的电话号码。