我可以使用iOS9 Contacts Framework获取格式化的电话号码吗?

时间:2016-09-02 20:15:25

标签: ios swift contacts

我希望能够以标准方式存储电话号码,例如只是数字(可能是国家代码的' +'),就像这些例子......

"17185555555"
"+17185555555"
"+447788888888"

...但我希望能够以正确格式化的方式将其显示给用户,例如

"1 (718) 555-5555"
"+1 (718) 555-5555"
"+44 (7788) 888888"

...无需依赖CNContactViewController对其进行格式化。

显然,只为美国/加拿大的数字做这件事很容易 - 它只是一种标准格式 - 但我希望它是通用的,因此它适用于来自任何国家/地区的数字。我知道this问题只能解答US / Can数字。

我知道我可以使用CNContactViewController以正确的格式显示数字,例如

let newContact = CNMutableContact()
newContact.givenName = "John"
newContact.familyName = "Smith"
newContact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberiPhone, value: CNPhoneNumber(stringValue:"17185555555"))]
let contactView = CNContactViewController(forContact: newContact)
self.presentViewController(contactView, animated: true, completion: nil)

这将在屏幕上显示正确格式化的数字,即

1 (718) 555-5555

...所以我知道框架中的某些东西可以做到。 (此方法适用于其他国家/地区的电话号码格式,只要您在号码前加上正确的国家/地区代码 - 例如" +44 ...")

来自various other questions我知道我可以从CNContact中获取原始数字和国家/地区代码,例如(以上例子)

for pNumber: CNLabeledValue in newContact.phoneNumbers {
    let value  = pNumber.value as! CNPhoneNumber
    let cc = value.valueForKey("countryCode") as? String
    let digits = value.valueForKey("digits") as? String
    print("cc:" + cc + ", " + digits)
}

...但是这只会再次显示未格式化的字符串 - 而不是我在这种情况下要查找的内容。

非常感谢任何帮助或其他推荐方法!

1 个答案:

答案 0 :(得分:2)

我的回答提出另一个lib

您可以使用this lib格式化数字。

你可以像这样使用:

let phoneNumber: NBPhoneNumber = try phoneUtil.parse("17185555555", defaultRegion: yourRegion)
let formattedString: String = try phoneUtil.format(phoneNumber, numberFormat: .E164)