In this one 1 Hour Video I’ll show you how to make a complete iPhone Calculator App. You’ll learn so much that you’ll be able to take this knowledge and make a countless number of completely different apps.
The complete project can be downloaded on GitHub for free. The heavily commented code can be found below.
►► Get my Python Programming Bootcamp Series for $10 ( Expires Feb 26th ) : http://bit.ly/SavePython3
►► Highest Rated Python Udemy Course + 20 Hrs + 86 Videos + New Videos Every Week
Do you like my videos? Consider becoming a Patreon and get access to exclusive videos! All Patreons who contribute $1 or more get a FREE coupon code to my Python Programming Bootcamp Series!!!
Code from the Video
ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import UIKit class ViewController: UIViewController { @IBOutlet weak var numberLabel: UILabel! // Struct with our data and functions for // working with that data var calculator = Calculator() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func clearClicked(_ sender: UIButton) { numberLabel.text = calculator.clearButtonPressed() } @IBAction func numberClicked(_ sender: UIButton) { numberLabel.text = calculator.numberButtonClicked( sender.currentTitle!) print(sender.currentTitle!) } @IBAction func signClicked(_ sender: UIButton) { numberLabel.text = calculator.signButtonClicked(numberLabel.text ?? "0") } @IBAction func percentClicked(_ sender: UIButton) { numberLabel.text = calculator.percentButtonClicked(numberLabel.text ?? "0") } @IBAction func mathButtonClicked(_ sender: UIButton) { numberLabel.text = calculator.mathButtonClicked(sender.currentTitle!) print(sender.currentTitle!) } @IBAction func equalClicked(_ sender: UIButton) { numberLabel.text = calculator.equalButtonPressed() } } |
Calculator.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
import Foundation struct Calculator{ var prevVal: String = "" var newVal: String = "" var resultVal: String = "" var mathOperator: String = "" var decimalClicked: Bool = false // Receives the number clicked, checks if we already have a // value to add it to, checks for repeating decimals, // handles any issues, adds the new number to the end // and then returns that value mutating func numberButtonClicked(_ num: String) -> String{ // Check for an empty string if(!resultVal.isEmpty){ // Start a new number self.newVal = num // Reset to create a new result self.resultVal = "" } else { // Used to block using multiple decimals if(num == "."){ if (self.decimalClicked != true){ self.newVal += num self.decimalClicked = true } } else { self.newVal += num } } return self.newVal } mutating func mathButtonClicked(_ mathOperator: String) -> String{ // Check if there was a previous calculation by seeing if // resultVal has a value if(resultVal.isEmpty){ // If result doesn't have a value then store current // value as previous for the next calculation self.prevVal = self.newVal } else { // If there is a current result store that as the previous self.prevVal = self.resultVal } // Restart creation of a new number self.newVal = "" self.decimalClicked = false self.mathOperator = mathOperator self.resultVal = "" return "" } mutating func equalButtonPressed() -> String{ // Reset decimal click self.decimalClicked = false // Convert values to Double so we can perform calculations let prevValDbl = Double(self.prevVal) let newValDbl = Double(self.newVal) switch(self.mathOperator){ case "+": self.resultVal = String(format: "%f", (prevValDbl! + newValDbl!)) case "-": self.resultVal = String(format: "%f", (prevValDbl! - newValDbl!)) case "x": self.resultVal = String(format: "%f", (prevValDbl! * newValDbl!)) case "/": self.resultVal = String(format: "%f", (prevValDbl! / newValDbl!)) default: // If equals is hit without an operator leave everything // as is self.resultVal = self.newVal } // Put the new result in the calculator input label self.prevVal = self.resultVal return self.resultVal } // Reset everything mutating func clearButtonPressed() -> String{ self.prevVal = "" self.newVal = "" self.resultVal = "" self.mathOperator = "" self.decimalClicked = false return "0" } // Converts current value in input label to its negative version mutating func signButtonClicked(_ currentVal: String) -> String{ // If current value is 0 return 0 if currentVal == "0" || currentVal == "0.00" { return "0" } else { // Convert the current value to a double, multiply by -1 // and return that result to be displayed in the input label let resultValDbl: Double = Double(currentVal)! let reversedVal: Double = resultValDbl * -1.0 self.resultVal = String(format: "%.2f", reversedVal) return self.resultVal } } mutating func percentButtonClicked(_ currentVal: String) -> String{ // If current value is 0 return 0 if currentVal == "0" || currentVal == "0.00" { return "0" } else { // Convert the current value to a double, multiply by .01 // and return that result to be displayed in the input label let resultValDbl: Double = Double(currentVal)! let percentVal: Double = resultValDbl * 0.01 self.resultVal = String(format: "%.2f", percentVal) return self.resultVal } } } |
Leave a Reply