D’après ton code, tu entres la date à partir d’un UILabel. C’est une mauvaise idée. L’utilisateur ne rate jamais une occasion de taper n’importe quoi !
Tu devrais utiliser un pickerDate pour que l’utilisateur puisse saisir les informations d’une manière parfaitement sécurisé, avec un composant graphique iOS que tout le monde connait.
Voici un lien sur un mini-tuto que j’ai écris pour quelqu’un ayant le même problème que toi. Il est question de Pickerdate, mais aussi de la manière d’utiliser la classe
DateFormatter pour afficher correctement une date.
Tu peux construire une String à partir d’une variable quelconque, en utilisant une chaine de formatage. Voici un exemple pour convertir un Double en String, avec une précision d’un chiffre après la virgule.
let valeur:Double = 37.56
let strValeur = String(format: “%.1f”, valeur)
print ("valeur string : ", strValeur)
Suffit de convertir le Double en String avec la syntaxe String(format:) que je t’ai montré.
Par contre je ne comprend pas l’intérêt de passer par des NSAttributedString, d’autant plus que je ne vois pas dans ton code une modification des attributs de formatage (type de police, taille des caractères, couleur, etc…). Ton problème vient peut-être de là.
Oui, mais attention, cela génère un String simple non mutable, au lieu d’un NSMutableAttributedString comme ton code.
L’évaluateur syntaxique de Swift vas toujours au plus simple, et c’est tant mieux.
Je persiste à penser que tu devrais utiliser une conversion avec un formatage, pour éviter les problèmes d’affichage.
Les données venant d’une source extérieure, il est possible d’avoir une valeur avec de nombreux chiffres après la virgule. En utilisant une mise en forme pour ne garder qu’un ou deux chiffres après la virgule, tu évites de surcharger l’affichage avec des informations inutiles.
Exemple :
// Valeur Double de base avec beaucoup de décimales
let valeurBrute:Double = 37.566598765
let string1 = "\(valeurBrute)"
print ("Double->String simple : ", string1)
let string2 = String(format: "%.2f", valeurBrute)
print ("Double->String avec mise en forme : ", string2)
Double->String simple : 37.566598765
Double->String avec mise en forme : 37.57
C’est plus agréable de lire 37.57 que 37.566598765 ! Ou même 37.6 avec une mise en forme de prenant qu’un chiffre après la virgule…