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