Swift 中的设计计算器 - 如何添加单个“.”什么时候需要输入浮点数?

Designing Calculator in Swift - How to add single "." when require to enter floating point number?

我正在 Swift 中为 IOS8 开发计算器。当按下 [0-9] 按钮时。它显示正确。运算符 [+ - / *] 也能成功运行。

我需要添加“.”按钮,因此用户可以输入浮点数 19.2、21.67、40.6725 - 如何编写代码以便“.”只出现一次,而不是 19.3.4?(在计算器中不是合法的浮点数)

我发现 rangeOfString(subString: String) 可能很有用。它 returns 一个可选的。如果在接收器中找不到传递的 String 参数,则它 returns nil

@IBOutlet weak var display: UILabel!
@IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!

        if (digit == "․") {
            if (display.text.rangeOfString("﹒") != nil) {
               //DO Something Here
            } else{

            }

你已经完成了 99%。您只想添加“。”如果您还没有显示器的话。我建议改为寻找 == nil 寻找 != nil.

    if (digit == "․") {
        if (display.text.rangeOfString(".") == nil) {
           // append "." to the display text because we
           // haven't see one yet

           display.text = display.text + "."

        } else {
           // do nothing, we already have a "." in the
           // display
        }

您可以省略 else 子句。我把它留在这里是为了解释。

Vacawana 的回答没有成功,因为语法已经过时了。我想到了更简单的解决方案,

let dupDecimal = decimalDupCheck(inputDigit: digit, stringToCheck: display.text)
        if userIsInTheMiddleOfTyping {
            if !dupDecimal {
                display.text = display.text! + digit
            }
        } else {
            display.text = digit == "." ? "0" + digit : digit
            userIsInTheMiddleOfTyping = true
        }
    }
    func decimalDupCheck(inputDigit digit: String, stringToCheck text: String?) -> Bool {
        if userIsInTheMiddleOfTyping {
            return digit == "." && text?.contains(".") == true
        } else {
            return false
        }

基本上你接受一个 BOOL 函数,检查 (".") 的任何重复,并根据其结果执行下一个条件括号。