This repository has been archived on 2025-09-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AndroidCalculator/AndroidCalculator/Calculator.swift
2020-05-06 09:26:22 +08:00

133 lines
3.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Calculator.swift
// AndroidCalculator
//
// Created by Pin Lin on 2020/5/5.
// Copyright © 2020 Pin Lin. All rights reserved.
//
import Foundation
class Calculator {
var formula = ["0"]
var process: String {
get {
var result = ""
formula.forEach { (item) in
result.append(item)
}
return result
}
}
var result: String {
get {
if formula.count < 3 {
return ""
}
var calculatingFormula = formula
if ["+", "-", "×", "÷"].firstIndex(of: calculatingFormula.last!) != nil {
calculatingFormula.removeLast()
}
while true {
let indexOf乘號 = calculatingFormula.firstIndex(of: "×")
let indexOf除號 = calculatingFormula.firstIndex(of: "÷")
if indexOf乘號 == nil && indexOf除號 == nil {
break
}
if indexOf乘號 != nil && (indexOf除號 == nil || indexOf乘號! < indexOf除號!) {
let number1 = Double(calculatingFormula[indexOf乘號! - 1])!
let number2 = Double(calculatingFormula[indexOf乘號! + 1])!
calculatingFormula[indexOf乘號! - 1] = String(number1 * number2)
calculatingFormula.remove(at: indexOf乘號! + 1)
calculatingFormula.remove(at: indexOf乘號!)
}
if indexOf除號 != nil && (indexOf乘號 == nil || indexOf除號! < indexOf乘號!) {
let number1 = Double(calculatingFormula[indexOf除號! - 1])!
let number2 = Double(calculatingFormula[indexOf除號! + 1])!
calculatingFormula[indexOf除號! - 1] = String(number1 / number2)
calculatingFormula.remove(at: indexOf除號! + 1)
calculatingFormula.remove(at: indexOf除號!)
}
}
print(calculatingFormula)
return calculatingFormula[0]
}
}
func click(_ text: String) {
switch text {
case "AC":
// 0
formula = ["0"]
case "0":
if formula.last == "0" {
return
} else if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
formula.append(text)
} else {
formula.append(formula.popLast()! + text)
}
case "1", "2", "3", "4", "5", "6", "7", "8", "9":
if formula.last == "0" {
formula.removeLast()
formula.append(text)
} else if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
formula.append(text)
} else {
formula.append(formula.popLast()! + text)
}
case ".":
if formula.last!.firstIndex(of: ".") != nil {
return
} else if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
return
} else {
formula.append(formula.popLast()! + text)
}
case "+", "-", "×", "÷":
if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
formula.removeLast()
}
formula.append(text)
case "+/-":
if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
formula.append("0")
}
if formula.last!.firstIndex(of: "-") != nil {
var number = formula.popLast()!
number.removeFirst()
formula.append(number)
} else {
formula.append("-" + formula.popLast()!)
}
case "%":
if ["+", "-", "×", "÷"].firstIndex(of: formula.last!) != nil {
return
}
formula.append(String(Double(formula.popLast()!)! / 100))
if Double(formula.last!)!.truncatingRemainder(dividingBy: 1) == 0 {
var number = formula.popLast()!
number.removeLast()
number.removeLast()
formula.append(number)
}
default:
print(formula)
}
}
}