2017-01-23 1 views
0

Je suis nouveau chez Swift. J'essaie de faire une demande de budget. Cette application a une calculatrice comme le clavier. Mon idée est lorsque les utilisateurs entrent dans l'application de l'argent ajoutera automatiquement une décimale pour les utilisateurs.Dans Swift 3.0 Comment faire reculer d'un caractère dans une chaîne lorsque vous tapez?

Par exemple, si vous tapez 1230 il vous donnera 12,30 et le type 123, il affiche 1,23

J'ai écrit quelques lignes de code en bas. Le problème est qu'il peut seulement ajouter le point décimal après le premier chiffre il ne reviendra pas en arrière quand vous donnez plus de chiffres. Il peut seulement afficher comme X.XXXXX

J'ai essayé de résoudre ce problème avec String.index (peut-être augmenter l'index?) Et le format NSNumber/NSString. Mais je ne sais pas c'est la bonne direction ou pas.

let number = sender.currentTitle! 
    let i: String = displayPayment.text! 

    if (displayPayment.text?.contains("."))!{ 

     displayPayment.text = i == "0" ? number : displayPayment.text! + number 

    } 
    else { 

    displayPayment.text = i == "0" ? number : displayPayment.text! + "." + number 

    } 
+0

La solution la plus simple consiste à demander à l'utilisateur d'entrer une valeur décimale car il peut être gênant d'entrer 12300 au lieu de 123 pour 123 $. Donc, ils pourraient taper 123 et il faudrait supposer décimal à 123.00. –

+0

duplicata possible de http://stackoverflow.com/a/29783546/2303865 –

Répondre

0

indexation Strings à Swift n'est pas aussi « simple » comme beaucoup voudraient, tout simplement en raison de la façon dont des chaînes sont représentés en interne. Si vous voulez juste ajouter un . à avant la deuxième à la dernière position de l'entrée d'utilisateur que vous pourriez le faire comme ceci:

let amount = "1230" 
var result = amount 

if amount.characters.count >= 2 { 
    let index = amount.index(amount.endIndex, offsetBy: -2) 
    result = amount[amount.startIndex..<index] + "." + amount[index..<amount.endIndex] 
} else { 
    result = "0.0\(amount)" 
} 

Donc, pour l'entrée de 1230result sera 12.30. Vous pouvez maintenant ajuster cela en fonction de vos besoins spécifiques. Par exemple, si l'utilisateur entre 30 ce code entraînera .30 (cela pourrait être ou ne pas être ce que vous voulez).