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

Mr *_*nev 16 ios swift

我想从iOS 9上的CNContact获取国家代码和电话号码.我尝试过很多东西,但找不到办法.我取得的最好成绩是打印:

<CNPhoneNumber: 0x7f886389a140: countryCode=us, digits=5555648583>
Run Code Online (Sandbox Code Playgroud)

我是这样做的:

func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
    print(contact.phoneNumbers.count)
    for number: CNLabeledValue in contact.phoneNumbers {
        print(number.value)
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是countryCode和数字的值.有任何想法如何在Swift中访问它们?谢谢!

fpg*_*503 10

不幸的是,由于他们是私人的,你无法得到他们.

let numberValue = number.value

let countryCode = numberValue.valueForKey("countryCode") as? String
let digits = numberValue.valueForKey("digits") as? String
Run Code Online (Sandbox Code Playgroud)

这有效,但如果您在此行中执行某些操作,您的应用很可能会被拒绝.

你可以看到你可以在这里使用的所有好东西.

如果您不打算将应用程序上传到商店,那么上面的解决方案就可以了,否则我会坚持使用某种正则表达式,因为它知道将来会破坏:

countryCode=(\w{2}),.*digits=(.+)>$
Run Code Online (Sandbox Code Playgroud)

  • 它违反了审核指南2.5。Objective-C是一种动态语言,因此您几乎可以访问任何想要的东西。他所查询的值是未记录的,并且不应该在生产代码中使用,因为它可能会在将来的版本中更改,而不会发出任何警告。 (2认同)

小智 5

Objective-C:

[number.value valueForKey:@"countryCode"]
Run Code Online (Sandbox Code Playgroud)

Swift:

number.value.valueForKey("countryCode") as? String
Run Code Online (Sandbox Code Playgroud)

valueForKey 不是私有的,您的应用程序不会被拒绝。