Implementación de DecimalFormatSymbol en KMP
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Cuando desarrollamos para Multiplataforma, pueden ser necesarias algunas utilidades que damos por sentadas en desarrollo nativo (en el que disponemos de prácticamente toda la JVM). Una de estas utilidades, que vamos a necesitar para acceder a ciertos elementos de configuración del sistema numérico, es la clase DecimalFormatSymbol que, si bien tenemos disponible tanto para android como para la JVM, no disponemos de ella en la parte iOS, por tanto, y mientras no se incluya de serie en el framework para KMP, necesitaremos agregarla por nuestra cuenta. En este pequeño artículo, agregaremos esta funcionalidad, implementando en cada plataforma soportada (Android, iOS, JVM) lo necesario para disponer de esta clase de forma global.
Implementación en commonMain
```kotlin expect class MPDecimalFormatSymbols { companion object { fun getInstance(): MPDecimalFormatSymbols } val decimalSeparator: Char val groupingSeparator: Char val zeroDigit: Char val perMill: String val percent: Char val digit: Char val patternSeparator: Char val infinity: String val naN: String val minusSign: Char val currencySymbol: String val internationalCurrencySymbol: String val monetaryDecimalSeparator: Char val monetaryGroupingSeparator: Char val exponentialSeparator: String } ```Implementación en androidMain
```kotlin import java.text.DecimalFormatSymbols import java.util.* actual class MPDecimalFormatSymbols { private val decimalSymbols = DecimalFormatSymbols(Locale.getDefault()) actual val decimalSeparator: Char get() = decimalSymbols.decimalSeparator actual val groupingSeparator: Char get() = decimalSymbols.groupingSeparator actual val zeroDigit: Char get() = decimalSymbols.zeroDigit actual val perMill: String get() = decimalSymbols.perMill.toString() actual val percent: Char get() = decimalSymbols.percent actual val digit: Char get() = decimalSymbols.digit actual val patternSeparator: Char get() = decimalSymbols.patternSeparator actual val infinity: String get() = decimalSymbols.infinity actual val naN: String get() = decimalSymbols.naN actual val minusSign: Char get() = decimalSymbols.minusSign actual val currencySymbol: String get() = decimalSymbols.currencySymbol actual val internationalCurrencySymbol: String get() = decimalSymbols.internationalCurrencySymbol actual val monetaryDecimalSeparator: Char get() = decimalSymbols.monetaryDecimalSeparator actual val monetaryGroupingSeparator: Char get() = decimalSymbols.monetaryGroupingSeparator actual val exponentialSeparator: String get() = decimalSymbols.exponentSeparator actual companion object { actual fun getInstance(): MPDecimalFormatSymbols = MPDecimalFormatSymbols() } } ```
Implementación en iosMain
```kotlin import platform.Foundation.NSLocale import platform.Foundation.NSNumberFormatter actual class MPDecimalFormatSymbols { private val decimalSymbols = NSNumberFormatter().apply { locale = NSLocale.new()!! } actual val decimalSeparator: Char get() = decimalSymbols.decimalSeparator.first() actual val groupingSeparator: Char get() = decimalSymbols.groupingSeparator.first() actual val zeroDigit: Char get() = decimalSymbols.zeroSymbol?.first() ?: '0' actual val perMill: String get() = decimalSymbols.perMillSymbol actual val percent: Char get() = '%' actual val digit: Char get() = '0' actual val patternSeparator: Char get() = ';' actual val infinity: String get() = "∞" actual val naN: String get() = "NaN" actual val minusSign: Char get() = decimalSymbols.minusSign.first() actual val currencySymbol: String get() = decimalSymbols.currencySymbol actual val internationalCurrencySymbol: String get() = decimalSymbols.internationalCurrencySymbol actual val monetaryDecimalSeparator: Char get() = decimalSymbols.currencyDecimalSeparator.first() actual val monetaryGroupingSeparator: Char get() = decimalSymbols.currencyGroupingSeparator.first() actual val exponentialSeparator: String get() = decimalSymbols.exponentSymbol actual companion object { actual fun getInstance(): MPDecimalFormatSymbols = MPDecimalFormatSymbols() } } ```
```kotlin import java.text.DecimalFormatSymbols import java.util.* actual class MPDecimalFormatSymbols { private val decimalSymbols = DecimalFormatSymbols(Locale.getDefault()) actual val decimalSeparator: Char get() = decimalSymbols.decimalSeparator actual val groupingSeparator: Char get() = decimalSymbols.groupingSeparator actual val zeroDigit: Char get() = decimalSymbols.zeroDigit actual val perMill: String get() = decimalSymbols.perMill.toString() actual val percent: Char get() = decimalSymbols.percent actual val digit: Char get() = decimalSymbols.digit actual val patternSeparator: Char get() = decimalSymbols.patternSeparator actual val infinity: String get() = decimalSymbols.infinity actual val naN: String get() = decimalSymbols.naN actual val minusSign: Char get() = decimalSymbols.minusSign actual val currencySymbol: String get() = decimalSymbols.currencySymbol actual val internationalCurrencySymbol: String get() = decimalSymbols.internationalCurrencySymbol actual val monetaryDecimalSeparator: Char get() = decimalSymbols.monetaryDecimalSeparator actual val monetaryGroupingSeparator: Char get() = decimalSymbols.monetaryGroupingSeparator actual val exponentialSeparator: String get() = decimalSymbols.exponentSeparator actual companion object { actual fun getInstance(): MPDecimalFormatSymbols = MPDecimalFormatSymbols() } } ```
Comentarios
Publicar un comentario