本文实例为大家分享了swift实现简单计算器的具体代码,供大家参考,具体内容如下
代码
//
// ViewController.swift
// Calculator
//
// Created by tutujiaw on 15/4/25.
// Copyright (c) 2015年 tutujiaw. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var display: UILabel!
var sumInMemory: Double = 0.0
var sumSoFar: Double = 0.0
var factorSoFar: Double = 0.0
var pendingAdditiveOperator = ""
var pendingMultiplicativeOperator = ""
var waitingForOperand = true
var displayValue: Double {
set {
let intValue = Int(newValue)
if (Double(intValue) == newValue) {
display.text = "\(intValue)"
} else {
display.text = "\(newValue)"
}
}
get {
return (display.text! as NSString).doubleValue
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func calculate(rightOperand: Double, pendingOperator: String) -> Bool {
var result = false
switch pendingOperator {
case "+":
sumSoFar += rightOperand
result = true
case "-":
sumSoFar -= rightOperand
result = true
case "*":
factorSoFar *= rightOperand
result = true
case "/":
if rightOperand != 0.0 {
factorSoFar /= rightOperand
result = true
}
default:
break
}
return result
}
func abortOperation() {
clearAll()
display.text = "####"
}
@IBAction func digitClicked(sender: UIButton) {
let digitValue = sender.currentTitle?.toInt()
if display.text!.toInt() == 0 && digitValue == 0 {
return
}
if waitingForOperand {
display.text = ""
waitingForOperand = false
}
display.text = display.text! + sender.currentTitle!
}
@IBAction func changeSignClicked() {
displayValue *= -1
}
@IBAction func backspaceClicked() {
if waitingForOperand {
return
}
var strValue = display.text!
display.text = dropLast(strValue)
if display.text!.isEmpty {
displayValue = 0.0
waitingForOperand = true
}
}
@IBAction func clear() {
if waitingForOperand {
return
}
displayValue = 0
waitingForOperand = true
}
@IBAction func clearAll() {
sumSoFar = 0.0
factorSoFar = 0.0
pendingAdditiveOperator = ""
pendingMultiplicativeOperator = ""
displayValue = 0.0
waitingForOperand = true
}
@IBAction func clearMemory() {
sumInMemory = 0.0
}
@IBAction func readMemory() {
displayValue = sumInMemory
waitingForOperand = true
}
@IBAction func setMemory() {
equalClicked()
sumInMemory = displayValue
}
@IBAction func addToMemory() {
equalClicked()
sumInMemory += displayValue
}
@IBAction func multiplicativeOperatorClicked(sender: UIButton) {
var clickedOperator = sender.currentTitle!
var operand = displayValue
if !pendingMultiplicativeOperator.isEmpty {
if !calculate(operand, pendingOperator: pendingMultiplicativeOperator) {
abortOperation()
return
}
displayValue = factorSoFar
} else {
factorSoFar = operand
}
pendingMultiplicativeOperator = clickedOperator
waitingForOperand = true
}
@IBAction func additiveOperatorClicked(sender: UIButton) {
let clickedOperator = sender.currentTitle!
var operand = displayValue
if !pendingMultiplicativeOperator.isEmpty {
if !calculate(operand, pendingOperator: pendingMultiplicativeOperator) {
abortOperation()
return
}
displayValue = factorSoFar
factorSoFar = 0.0
pendingMultiplicativeOperator = ""
}
if !pendingAdditiveOperator.isEmpty {
if !calculate(operand, pendingOperator: pendingAdditiveOperator) {
abortOperation()
return
}
displayValue = sumSoFar
} else {
sumSoFar = operand
}
pendingAdditiveOperator = clickedOperator
waitingForOperand = true
}
@IBAction func unaryOperatorClicked(sender: UIButton) {
let clickedOperator = sender.currentTitle!
var result: Double = 0
if clickedOperator == "Sqrt" {
if displayValue < 0 {
abortOperation()
return
}
result = sqrt(displayValue)
} else if clickedOperator == "x^2" {
result = pow(displayValue, 2)
} else if clickedOperator == "1/x" {
if displayValue == 0 {
abortOperation()
return
}
result = 1.0 / displayValue
}
displayValue = result
waitingForOperand = true
}
@IBAction func equalClicked() {
var operand = displayValue
if !pendingMultiplicativeOperator.isEmpty {
if !calculate(operand, pendingOperator: pendingMultiplicativeOperator) {
abortOperation()
return
}
operand = factorSoFar
factorSoFar = 0.0
pendingMultiplicativeOperator = ""
}
if !pendingAdditiveOperator.isEmpty {
if !calculate(operand, pendingOperator: pendingAdditiveOperator) {
abortOperation()
return
}
pendingAdditiveOperator = ""
} else {
sumSoFar = operand
}
displayValue = sumSoFar
sumSoFar = 0.0
waitingForOperand = true
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。