Muy buenas, soy Miguel y en esta ocasión les traigo este nuevo tutorial.
Cuando construí una aplicación de calculadora simple como mi primera aplicación, me encontré con un problema que nunca fue una preocupación cuando comencé a codificar la aplicación: los números, seguramente tienen diferentes formatos de presentación, según la configuración regional del teléfono del usuario.
Eso puede afectar no solo la UI / UX
, por supuesto, sino también la forma en que escribe su código. No desea tener una cadena que no se pueda convertir en un doble y, por lo tanto, no se pueda usar en el cálculo.
Puede haber otras formas de resolver esto, pero la que encontré más fácil es usar NumberFormatter Type. ¡Swift simplifica las cosas y se ocupa de todas las transformaciones por ti!
Así que ¿Cómo se hace? Usaremos un ejemplo simple en Playgrounds
.
1. Primero declaramos una variable con el tipo NumberFormatter
:
var number = NumberFormatter ()
2. Luego, usando algunas de las propiedades de esa Clase, podemos formatearla como queramos:
- Primero usemos la Región actual del usuario para establecer el formato general de nuestra variable.
number.locale = .current
- Puede tener muchos estilos, como moneda, ordinal o porcentaje. Para el ejemplo, manténgalo con decimal:
number.numberStyle = .decimal
- Configurándolo en verdadero, estamos aceptando el formato que tiene la región actual para el separador de miles. Alternativamente, podríamos usar la línea comentada, configurando el separador de grupos nosotros mismos:
number.usesGroupingSeparator = true //number.groupingSeparator = ""
3. Luego, tratemos con la entrada del usuario desde la interfaz de usuario. Ese valor proviene, por ejemplo, de un campo de texto, es de tipo String
y lo colocamos en una variable:
var userInput = "12000.02"
Solo una cadena, sin espacios y con un punto como separador decimal.
4. La parte «complicada» aquí es que necesitamos convertir el String
en un NSNumber
para poder usar el método string ()
del tipo NumberFormatter
. Para eso y para eliminar la complicación cada vez que necesitemos usar esto, hagámoslo como una función:
5. Si pasamos la entrada de nuestro User
a través de la función, tenemos el resultado útil y correctamente formateado como un String
, lista para ser presentada en la UI
:
var result = formatResultForRegion(basedOn: userInput)
print(result)
En mi caso imprimirá 12 000,02
porque soy portugués y así es como dividimos los miles (con un espacio) y los decimales (con una coma).
6. Cambiemos algunas de las propiedades de nuestra variable NumberFormatter
y veamos qué obtenemos:
number.locale = Locale (identificador: "pt_BR") number.numberStyle = .currency
Como puede ver, también podemos obligar a la región a ser la que queramos. Simplemente configúrelo en la región que desee. Puede encontrar la guía para los identificadores correctos aquí.
Según esos cambios, si vuelve a llamar a la función, el resultado será:
$ R 12.000,02
¡Cambiamos la región a Brasil y el estilo a la moneda!
¡Y eso es! Para saber más sobre el tipo NumberFormatter
, sus propiedades y métodos, vaya aquí.
Espero que te sea de utilidad. Gracias por leer.
Añadir comentario