我希望能够以标准方式存储电话号码,例如只是数字(可能是国家代码的' +'),就像这些例子......
"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)
}
...但是这只会再次显示未格式化的字符串 - 而不是我在这种情况下要查找的内容。
非常感谢任何帮助或其他推荐方法!
答案 0 :(得分:2)
我的回答提出另一个lib
您可以使用this lib格式化数字。
你可以像这样使用:
let phoneNumber: NBPhoneNumber = try phoneUtil.parse("17185555555", defaultRegion: yourRegion)
let formattedString: String = try phoneUtil.format(phoneNumber, numberFormat: .E164)