¿Puedo usar iOS9 Contacts Framework para get un número de teléfono con formatting?

Me gustaría poder almacenar un número de teléfono de forma estándar, por ejemplo, solo los dígitos (potencialmente con el '+' para el código de país), algo así como estos ejemplos …

"17185555555" "+17185555555" "+447788888888" 

… pero me gustaría poder MOSTRARLO a un usuario de forma adecuada, por ejemplo,

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

… SIN tener que depender de un CNContactViewController para formatearlo.

Obviamente, hacer esto solo para los numbers de EE. UU. / Canadá sería fácil, es solo un formatting estándar, pero me gustaría que fuera genérico, por lo que puede funcionar para numbers de cualquier país. Sé que esta pregunta da una respuesta solo para los numbers de EE. UU. / Can.

Sé que podría usar un CNContactViewController para mostrar el número en el formatting correcto, por ejemplo

 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) 

Esto mostrará el número en la pantalla correctamente formateado, es decir

 1 (718) 555-5555 

… así que sé que algo en el marco puede hacerlo. (Este enfoque funciona para otros formattings de número de teléfono de un país, siempre que prefiera el número con el código de país correcto, por ejemplo, "+44 …")

De varias otras preguntas sé que puedo get los dígitos brutos y el código de país de un CNContact, por ejemplo (siguiendo el ejemplo anterior)

 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) } 

… pero esto solo mostrará la cadena no formateada nuevamente, no lo que estoy buscando en este caso.

Cualquier ayuda u otros enfoques recomendados realmente apreciados.

Mi respuesta propone otra lib.

Puedes formatear tus numbers con esta lib .

Y puedes usar así:

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