在Swift 3.0中如何使字符串中的一个字符在你输入时向后移动?

问题描述:

我是Swift中的新成员。 我想做一个预算申请。这个应用程序有一个计算器像键盘。我的想法是,当用户输入钱的应用程序会自动为用户添加一个小数位。在Swift 3.0中如何使字符串中的一个字符在你输入时向后移动?

例如,如果你输入1230,它会给你和12.30键入123会显示1.23

我写的几行代码楼下。问题是它只能在第一位数字后加小数点,当你输入更多数字时它不会倒退。它只能显示为X.XXXXX

我试着用String.index(也许增加索引?)和NSNumber/NSString格式来解决这个问题。但我不知道这是正确的方向与否。

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

最简单的解决方案是让用户输入小数,因为它可能会令人讨厌输入12300,而不是123.00美元。所以他们可以输入123,它会假设小数点在123.00。 –

+0

http://stackoverflow.com/a/29783546/2303865可能的重复 –

索引​​斯威夫特并不像“爽快”尽可能多想,只是由于字符串是如何在内部表示。如果你只是想前一秒在添加.到用户输入的最后一个位置,你可以做这样的:

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)" 
} 

所以对于1230result的投入将12.30。现在您可能需要根据您的特定需求来调整它。例如,如果用户输入30此代码将导致.30(这可能会或可能不是你想要的)。