ContentView.swift
//
// ContentView.swift
// swiftuidev
//
// Created by Cairocoders on 7/30/21.
//
import SwiftUI
struct ContentView: View {
@State private var firstNumber = 0
@State private var secondNumber = 0
@State private var operand = ""
@State private var calculatorText = "0"
@State private var isTypingNumber = false
var body: some View {
VStack(spacing: 30) {
TextField("0", text: $calculatorText)
.border(Color.white, width: 2)
.padding()
.multilineTextAlignment(.trailing)
.foregroundColor(Color.white)
HStack {
createCalcDigit("1")
.modifier(CustomButton())
Spacer()
createCalcDigit("2")
.modifier(CustomButton())
Spacer()
createCalcDigit("3")
.modifier(CustomButton())
}
.padding()
.foregroundColor(Color.white)
HStack {
createCalcDigit("4")
.modifier(CustomButton())
Spacer()
createCalcDigit("5")
.modifier(CustomButton())
Spacer()
createCalcDigit("6")
.modifier(CustomButton())
}
.padding()
.foregroundColor(Color.white)
HStack {
createCalcDigit("7")
.modifier(CustomButton())
Spacer()
createCalcDigit("8")
.modifier(CustomButton())
Spacer()
createCalcDigit("9")
.modifier(CustomButton())
}
.padding()
.foregroundColor(Color.white)
HStack {
Button(action: {
self.operandTapped("-")
}) {
(Text("-"))
}
.modifier(CustomButton(buttonbackgroundColor: Color.gray))
Spacer()
createCalcDigit("0")
.frame(width: 70, height: 70)
.foregroundColor(Color.white)
.background(Color.orange)
.clipShape(Circle())
Spacer()
Button(action: {
self.operandTapped("+")
}) {
(Text("+"))
}
.modifier(CustomButton(buttonbackgroundColor: Color.gray))
}
.padding()
.foregroundColor(Color.white)
HStack {
Spacer()
Button(action: {
self.calculate()
}) {
(Text("="))
}
.modifier(CustomButton(buttonbackgroundColor: Color.gray))
Spacer()
}
.foregroundColor(Color.white)
}
.font(.largeTitle)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.black)
.ignoresSafeArea()
}
private func createCalcDigit(_ number: String) -> Button<Text> {
return Button(action: {
self.digitTapped(number)
}) {
(Text(number))
}
}
private func digitTapped(_ number: String) -> Void {
if isTypingNumber {
calculatorText += number
} else {
calculatorText = number
isTypingNumber = true
}
}
private func operandTapped(_ operand: String) {
isTypingNumber = false
firstNumber = Int(calculatorText)!
self.operand = operand
calculatorText = operand
}
private func calculate() {
isTypingNumber = false
var result = 0
secondNumber = Int(calculatorText)!
if operand == "+" {
result = firstNumber + secondNumber
} else if operand == "-" {
result = firstNumber - secondNumber
}
calculatorText = "\(result)"
}
}
struct CustomButton: ViewModifier {
var buttonbackgroundColor = Color.orange
func body(content: Content) -> some View {
return content
.frame(width: 70, height: 70)
.foregroundColor(Color.white)
.background(buttonbackgroundColor)
.clipShape(Circle())
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
