如何让我的计算器快速添加句号?

时间:2016-05-26 17:00:49

标签: ios swift cs193p

这是我的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
}

这是我的模型或视图控制器代码

private var operations: Dictionary<String,Operation> = [
    "π":    Operation.Constant(M_PI),
    "e":    Operation.Constant(M_E),
    "√":    Operation.UnaryOperation(sqrt),
    "cos":  Operation.UnaryOperation(cos),
    "✕":    Operation.BinaryOperation({ $0 * $1 }),
    "÷":    Operation.BinaryOperation({ $0 / $1 }),
    "+":    Operation.BinaryOperation({ $0 + $1 }),
    "−":    Operation.BinaryOperation({ $0 - $1 }),
    "±":    Operation.UnaryOperation({ -$0 }),
    "=":    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

中获取显示文字

3 个答案:

答案 0 :(得分:3)

你采取了错误的做法。 .不应该是运营商。你的计算器大脑不应该参与其中。这项工作应该在ViewController而不是您的模型中完成。如果.尚未包含display,它应该像数字一样运作并将display字符附加到.字符串。

您需要考虑输入.并且用户未输入数字的情况。您可能希望使用0.开始显示,而不仅仅是.

答案 1 :(得分:2)

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

您需要在控制器中添加插座

 @IBOutlet var displayTextField: UITextField!

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

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

答案 2 :(得分:1)

这是我的功能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
}