[Swift][내배캠] iOS 주특기 입문 강의 - 과제 (Storyboard Base)

팔랑이·2024년 6월 20일
0

iOS/Swift

목록 보기
35/71
post-thumbnail

스냅킷을 활용하여 코드베이스로 해결한 과제는 여기에서 확인


지난번 클래스/프로토콜 활용하는 계산기 로직 만들기 과제에 이어,
이번에는 스토리보드와 코드베이스로 각각 계산기를 만들어보는 과제가 주어졌다.

스토리보드 - 코드 화면

다른분들은 제약조건 거는게 익숙치 않으셔서 그런지 코드베이스가 편하다고 하시는 분들이 많았는데, 난 스토리보드가 아직 더 편하다... 오토레이아웃 깨부의 결과 필요한 코드의 양이 아주아주 줄어들기 때문에...

CalculatorViewController.swift

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
    }

}

CalculatorLogics.swift

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
        }
    }
}

후기

  • 코드베이스에 익숙해질 생각에 머리가 어질어질하다
  • inspector에 있던 tag를 사용해서 버튼을 분리했다
profile
정체되지 않는 성장

0개의 댓글