스냅킷을 활용하여 코드베이스로 해결한 과제는 여기에서 확인
지난번 클래스/프로토콜 활용하는 계산기 로직 만들기 과제에 이어,
이번에는 스토리보드와 코드베이스로 각각 계산기를 만들어보는 과제가 주어졌다.
다른분들은 제약조건 거는게 익숙치 않으셔서 그런지 코드베이스가 편하다고 하시는 분들이 많았는데, 난 스토리보드가 아직 더 편하다... 오토레이아웃 깨부의 결과 필요한 코드의 양이 아주아주 줄어들기 때문에...
import UIKit
class CalculatorViewController: UIViewController {
let calculatorLogics = CalculatorLogics()
@IBOutlet weak var numLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
numLabel.text = "0"
}
@IBAction func buttonTapped(_ sender: UIButton) {
let newLabel = calculatorLogics.tapButton(sender.tag)
numLabel.text = newLabel
}
}
import Foundation
class CalculatorLogics {
var currentNumLabel = ""
func tapButton(_ tag: Int) -> String {
switch tag {
case 0:
if currentNumLabel == "0" {
} else {
currentNumLabel += "0"
}
case 1...9:
if currentNumLabel == "0" {
currentNumLabel = "\(tag)"
} else {
currentNumLabel += "\(tag)"
}
case 11:
currentNumLabel += "+"
case 12:
currentNumLabel += "-"
case 13:
currentNumLabel += "*"
case 14:
currentNumLabel += "/"
case 15:
currentNumLabel = "0"
case 16:
if let currentnumlabel = calculate(expression: currentNumLabel) {
currentNumLabel = String(currentnumlabel)
} else {
print("Error")
}
default:
break
}
return currentNumLabel
}
func calculate(expression: String) -> Int? {
let expression = NSExpression(format: expression)
if let result = expression.expressionValue(with: nil, context: nil) as? Int {
return result
} else {
return nil
}
}
}