如何让我的计算器在 swift 中添加句点?

How can I make my calculator add a Period in swift?

这是我的 UIButton 的代码

@IBAction private func performOperation(sender: UIButton) {
    if userIsInTheMiddleOfTyping {
        brain.setOperand(displayValue)
        userIsInTheMiddleOfTyping = false
    }
    if let mathematicalSymbol = sender.currentTitle {
        brain.performOperation(mathematicalSymbol)
    }
    displayValue = brain.result
}

这是我的模型或 viewcontroller 代码

private var operations: Dictionary<String,Operation> = [
    "π":    Operation.Constant(M_PI),
    "e":    Operation.Constant(M_E),
    "√":    Operation.UnaryOperation(sqrt),
    "cos":  Operation.UnaryOperation(cos),
    "✕":    Operation.BinaryOperation({ [=12=] *  }),
    "÷":    Operation.BinaryOperation({ [=12=] /  }),
    "+":    Operation.BinaryOperation({ [=12=] +  }),
    "−":    Operation.BinaryOperation({ [=12=] -  }),
    "±":    Operation.UnaryOperation({ -[=12=] }),
    "=":    Operation.Equals,
    ".":    Operation.Period
]

private enum Operation {
    case Constant(Double)
    case UnaryOperation((Double) -> Double)
    case BinaryOperation((Double, Double) -> Double)
    case Equals
    case Period
}

func performOperation (symbol: String) {
    if let operation = operations[symbol] {
        switch operation {
        case .Constant(let associatedConstantValue):
            accumulator = associatedConstantValue
            break
        case .UnaryOperation(let associatedFunction):
            accumulator = associatedFunction(accumulator)
            break
        case .BinaryOperation(let associatedFunction):
            executePendingBinaryOperation()
            pending = PendingBinaryOperationInfo(binaryFunction: associatedFunction, firstOperand: accumulator)
            break
        case .Equals:
            executePendingBinaryOperation()
            break
        case .Period:
            displayTextContainsPeriod()
            break
        }
    }
}

private func displayTextContainsPeriod() -> Bool
{

}

我知道要检查是否存在现有句点 我需要检查字符串是否包含子字符串“.”但我不确定如何在我的 func displayTextContainsPeriod

中获取显示文本

假设显示文本在 UITextField 中并且您在故事板中构建它(如果不是,请更新问题)。

您需要给控制器添加一个插座

 @IBOutlet var displayTextField: UITextField!

然后,将它连接到故事板中的字段。

在您的代码中,您可以参考self.displayTextField.text获取UITextField中的当前文本。

您采用了错误的方法。 . 不应该是运算符。你的计算器大脑不应该参与其中。这项工作应该在您的 ViewController 中完成,而不是您的模型。如果 display 尚未包含 ..

,它应该像数字一样操作并将 . 字符附加到 display 字符串

您需要考虑输入 . 并且用户不在输入数字的过程中的情况。例如,您可能希望以 0. 而不是仅 . 开始显示。

这是我的函数 touchDigit(感谢@vacawama),可能有点乱。 作为初学者,希望得到一些有用的建议。 :)

 @IBAction private func touchDigit(sender: UIButton) {
    let digit = sender.currentTitle!
    if userIsInTheMiddleOfTyping{
        let textCurrentlyInDisplay = display.text!
        display.text = (digit == "." && textCurrentlyInDisplay.rangeOfString(".") != nil) ? textCurrentlyInDisplay : textCurrentlyInDisplay + digit

    }else{
        display.text = (digit == ".") ? "0." : digit
    }
    userIsInTheMiddleOfTyping = true
}