j’ai des champs de saisie textfield que je transforme en double pour faire des calculs
quand je suis en language Americain cela fonctionne correctement
séparateur . au clavier
mais cela ne fonctionne plus quand je suis en language Francais avec le séparateur ,
au clavier
Comment faire pour cela fonctionne dans les 2 cas
toujours ces problèmes d’internationalisation !!
let newValue = value
.replacingOccurrences(of: ",", with: ".")
.replacingOccurrences(of: ".", with: Locale.current.decimalSeparator ?? ".")
Tu remplaces les virgules par des points, puis les points par le décimal séparateur de la locale actuelle (ou par un point si le séparateur donné vaut nil)
Alors pour replacingOccurrences c’est une fonction de base des chaînes de caractères que tu trouves dans à peu près tous les langages évolués, avec un nom différent à chaque fois, mais la fonction est grosso modo toujours la même.
Concernant le séparateur décimal, c’est lié à la langue, c’est donc naturellement qu’il fallait chercher dans la classe Locale.
Après, malheureusement, c’est aussi l’expérience qui aide à trouver ce genre de choses, mais je te conseille de te plonger régulièrement dans les documentations des classes de bases, ne serait-ce que pour découvrir ce qui existe. Et franchement, on n’a pas à se plaindre, la doc apple est plutôt claire. Ce qui n’est pas le cas de toutes, loin de là.
Petite précision : n’oublie pas que depuis iOS 13 (je crois) il faut différencier la locale du device et la locale de l’application.
Par exemple tu peux lancer l’application en anglais sur un iPhone en français, dans ces cas là, plutôt que d’utiliser la Locale.current je te préconise cette petite extension qui fait le job :
public extension Locale {
/// Returns the preferred locale used in the app, if none is found, returns `Locale.current`
static var appCurrent : Locale {
if let preferred = Bundle.main.preferredLocalizations.first {
return Locale(identifier: preferred)
}
else {
return current
}
}
}
Ainsi tu utilises formatter.locale = Locale.appCurrent pour t’éviter les déconvenues des utilisations parfois hors du commun de certains utilisateurs.