From bd2ae01a7a9b9ffad3d0e9972c4921aa9f1a745c Mon Sep 17 00:00:00 2001 From: Sei Kim Date: Wed, 25 Jan 2023 11:37:32 +0900 Subject: [PATCH 01/38] =?UTF-8?q?feat:=201-9=20=EB=B2=84=ED=8A=BC=20ViewCo?= =?UTF-8?q?ntroller=EC=99=80=20=EC=97=B0=EA=B2=B0=20-=20IBAction=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/ViewController.swift | 5 +++ .../View/Base.lproj/Main.storyboard | 31 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Calculator/Calculator/Controller/ViewController.swift b/Calculator/Calculator/Controller/ViewController.swift index addc807..c634e65 100644 --- a/Calculator/Calculator/Controller/ViewController.swift +++ b/Calculator/Calculator/Controller/ViewController.swift @@ -11,4 +11,9 @@ class ViewController: UIViewController { super.viewDidLoad() // Do any additional setup after loading the view. } + + @IBAction func digitDidTap(_ sender: UIButton) { + print(sender.currentTitle ?? "-") + } + } diff --git a/Calculator/Calculator/View/Base.lproj/Main.storyboard b/Calculator/Calculator/View/Base.lproj/Main.storyboard index 3d0be3e..93b3d5f 100644 --- a/Calculator/Calculator/View/Base.lproj/Main.storyboard +++ b/Calculator/Calculator/View/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -121,6 +121,9 @@ + + + @@ -154,6 +157,9 @@ + + + @@ -200,6 +206,9 @@ + + + @@ -246,6 +255,9 @@ + + + From c10cf31d0d5c519397b8f0c7de4e0da768616249 Mon Sep 17 00:00:00 2001 From: Sei Kim Date: Wed, 25 Jan 2023 12:46:35 +0900 Subject: [PATCH 03/38] =?UTF-8?q?feat:=20equals,=20clear=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20ViewController=EC=99=80=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calculator/Controller/ViewController.swift | 8 ++++++++ .../Calculator/View/Base.lproj/Main.storyboard | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Calculator/Calculator/Controller/ViewController.swift b/Calculator/Calculator/Controller/ViewController.swift index 277cac1..2e1786b 100644 --- a/Calculator/Calculator/Controller/ViewController.swift +++ b/Calculator/Calculator/Controller/ViewController.swift @@ -20,4 +20,12 @@ class ViewController: UIViewController { print(sender.currentTitle ?? "사칙연산") } + @IBAction func equalsDidTap(_ sender: UIButton) { + print(sender.currentTitle ?? "==") + } + + @IBAction func clearDidTap(_ sender: UIButton) { + print(sender.currentTitle ?? "c") + } + } diff --git a/Calculator/Calculator/View/Base.lproj/Main.storyboard b/Calculator/Calculator/View/Base.lproj/Main.storyboard index 1150fcb..aed5a36 100644 --- a/Calculator/Calculator/View/Base.lproj/Main.storyboard +++ b/Calculator/Calculator/View/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -84,6 +84,9 @@ + + + From a8c4cc1ac1f97e49fba211bad7970806e12eb9b9 Mon Sep 17 00:00:00 2001 From: zhunhe Date: Wed, 25 Jan 2023 15:16:27 +0900 Subject: [PATCH 04/38] =?UTF-8?q?feat:=20"0",=20"00",=20"."=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20ViewController=EC=99=80=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calculator/Controller/ViewController.swift | 7 +++++++ .../Calculator/View/Base.lproj/Main.storyboard | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Calculator/Calculator/Controller/ViewController.swift b/Calculator/Calculator/Controller/ViewController.swift index 2e1786b..96a7f2a 100644 --- a/Calculator/Calculator/Controller/ViewController.swift +++ b/Calculator/Calculator/Controller/ViewController.swift @@ -28,4 +28,11 @@ class ViewController: UIViewController { print(sender.currentTitle ?? "c") } + @IBAction func signToggleDidTap(_ sender: UIButton) { + print(sender.currentTitle ?? "+-") + } + + @IBAction func zeroOrPointDidTap(_ sender: UIButton) { + print(sender.currentTitle ?? "00.") + } } diff --git a/Calculator/Calculator/View/Base.lproj/Main.storyboard b/Calculator/Calculator/View/Base.lproj/Main.storyboard index aed5a36..1e5d0db 100644 --- a/Calculator/Calculator/View/Base.lproj/Main.storyboard +++ b/Calculator/Calculator/View/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -106,6 +106,9 @@ + + + @@ -98,7 +98,7 @@ - + @@ -147,7 +147,7 @@ - + @@ -196,7 +196,7 @@ - + @@ -245,7 +245,7 @@ - + From 20588fbf0da192189df0b4b2316461319a7e34f8 Mon Sep 17 00:00:00 2001 From: Sei Kim Date: Thu, 2 Feb 2023 17:59:31 +0900 Subject: [PATCH 38/38] =?UTF-8?q?refactor:=201.=20View=EC=99=80=20controll?= =?UTF-8?q?er=EC=9D=98=20=EB=B6=84=EB=A6=AC=20=202.=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=20naming=203.=20string=20literal=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - displayNumber, displayLabel 과 view 의 분리 - 변수 naming isNumberInTyping -> isTypingNumber - Constant 추가 및 string literal을 상수로 대체 --- .../Controller/CalculatorViewController.swift | 66 +++++++++++-------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/Calculator/Calculator/Controller/CalculatorViewController.swift b/Calculator/Calculator/Controller/CalculatorViewController.swift index 9d0b9c2..009c74f 100644 --- a/Calculator/Calculator/Controller/CalculatorViewController.swift +++ b/Calculator/Calculator/Controller/CalculatorViewController.swift @@ -15,6 +15,9 @@ final class CalculatorViewController: UIViewController { static let allClear = "AC" static let clearEntry = "CE" static let NotANumber = "NaN" + static let emptyString = "" + static let comma = "," + static let nine = "9" } @IBOutlet private weak var operatorLabel: UILabel! @@ -30,25 +33,30 @@ final class CalculatorViewController: UIViewController { return formatter }() - private let maxDigitLength = 20 + private let maxDigitLength = 15 private var isDisplayNumberZeroOnly: Bool { displayNumber == Constant.zero } - private var formulaString = "" - private var isNumberInTyping = false - private var displayNumber: String { - get { - entryNumberLabel.text?.replacingOccurrences(of: ",", with: "") ?? "0" - } - set { - entryNumberLabel.text = newValue + private var formulaString = Constant.emptyString + private var isTypingNumber = false + private var displayNumber: String = Constant.zero { + willSet { + guard let lastElement = newValue.last else { + return + } + let lastCharacter = String(lastElement) + switch lastCharacter { + case Constant.dot: + entryNumberLabel.text?.append(lastCharacter) + case Constant.zero...Constant.nine: + entryNumberLabel.text = parse(newValue) + default: + entryNumberLabel.text = newValue + } } } - private var displayOperator: String { - get { - operatorLabel.text ?? "" - } - set { + private var displayOperator: String = Constant.emptyString { + willSet { operatorLabel.text = newValue } } @@ -57,22 +65,22 @@ final class CalculatorViewController: UIViewController { guard let digit = sender.currentTitle, displayNumber.count < maxDigitLength else { return } - if isNumberInTyping { + if isTypingNumber { displayNumber += digit } else { displayNumber = digit - isNumberInTyping = true + isTypingNumber = true } } @IBAction private func arithmeticOperatorButtonDidTap(_ sender: UIButton) { if displayNumber == Constant.NotANumber { - displayNumber = "0" + displayNumber = Constant.zero } guard let buttonTitle = sender.currentTitle else { return } - if isNumberInTyping || false == isDisplayNumberZeroOnly { + if isTypingNumber || false == isDisplayNumberZeroOnly { addCalculationHistory() } displayOperator = buttonTitle @@ -83,11 +91,13 @@ final class CalculatorViewController: UIViewController { guard false == displayOperator.isEmpty else { return } + print(formulaString) addCalculationHistory() let result = calculationResult(from: formulaString) + print(formulaString, result, displayNumber) displayNumber = result clearOperatorAndFormulaString() - isNumberInTyping = false + isTypingNumber = false } @IBAction private func clearButtonDidTap(_ sender: UIButton) { @@ -107,7 +117,7 @@ final class CalculatorViewController: UIViewController { let number = Double(displayNumber) else { return } - displayNumber = parse(String(number * -1)) + displayNumber = String(number * -1) } @IBAction private func zeroOrPointButtonDidTap(_ sender: UIButton) { @@ -128,7 +138,7 @@ final class CalculatorViewController: UIViewController { return } displayNumber += buttonTitle - isNumberInTyping = true + isTypingNumber = true default: return } @@ -141,7 +151,7 @@ extension CalculatorViewController { let result = ExpressionParser.parse(from: formula).result() switch result { case .success(let res): - return parse(String(res)) + return String(res) case .failure(let error): return error.description } @@ -149,14 +159,14 @@ extension CalculatorViewController { // MARK: Parse - numberFormat private func parse(_ value: String) -> String { - let removedComma = value.replacingOccurrences(of: ",", with: "") + let removedComma = value.replacingOccurrences(of: Constant.comma, with: Constant.emptyString) let nsNumber = numberFormatter.number(from: removedComma) - return (numberFormatter.string(for: nsNumber) ?? "0") + return (numberFormatter.string(for: nsNumber) ?? Constant.zero) } // MARK: Add History private func addCalculationHistory() { - let currOperator = formulaString.isEmpty ? "" : displayOperator + let currOperator = formulaString.isEmpty ? Constant.emptyString : displayOperator appendHistoryStackView(operator: currOperator) formulaString += "\(currOperator)\(displayNumber)" } @@ -173,12 +183,12 @@ extension CalculatorViewController { // MARK: Clear private func clearEntry() { displayNumber = Constant.zero - isNumberInTyping = false + isTypingNumber = false } private func clearOperatorAndFormulaString() { - displayOperator = "" - formulaString = "" + displayOperator = Constant.emptyString + formulaString = Constant.emptyString } private func clearAll() {