iOS 9:获取CNContact国家/地区代码和电话号码

时间:2016-01-11 20:32:34

标签: ios swift

我想从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中访问它们?谢谢!

6 个答案:

答案 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;是获得完整的电话号码。