toggle()

이진욱(JIN WOOK)·2024년 11월 22일
0

제비에관하여(Swift)

목록 보기
6/10


클릭하여 공식문서로 이동

오늘은 Boolean값을 변경해주는 메서드인 toggle() 메서드 사용법에 대해서 공부할꺼에요.

오늘은 팀원분들과 서로 계산기 과제 코드리뷰를 하는 시간을 가졌었습니다.
기존에 코드는 이렇게 써져있었어요.

      let buttonTitle = button.currentTitle!
        switch buttonTitle {
        case "0"..."9":
            accumulateButton(buttonText: buttonTitle)
            numberButtonTapped = true
        case "=":
            if numberButtonTapped && operationButtonTapped {
                mainLabel.text = String(calculate(expression: accumulateButtonString)!)
                operationButtonTapped = false
            }
        case "AC":
            accumulateButtonString = resetAll(accumulateButton: &accumulateButtonString)
            buttonStatusInitial()
        default: //연산자 기호 처리 case
            if numberButtonTapped {
                operatorButton(operatorButtonText: buttonTitle)
                operationButtonTapped = true
                numberButtonTapped = false
            }
        }
    }

그러다가 리뷰 시간 직전에 코드의 가독성,버튼이 눌렸다는걸 확실하게 표현해 주는거에 대해서 고민을 하다가
예전에 앱만들기 강의중 비밀번호 가리기 모드를 구현할떄 이 메서드를 썻던게 기억이 났습니다.

그래서 코드를 이렇게 변경하게 됩니다.

      let buttonTitle = button.currentTitle!
        switch buttonTitle {
        case "0"..."9":
            accumulateButton(buttonText: buttonTitle)
             numberButtonTapped.toggle()
        case "=":
            if numberButtonTapped && operationButtonTapped {
                mainLabel.text = String(calculate(expression: accumulateButtonString)!)
                operationButtonTapped = false
            }
        case "AC":
            accumulateButtonString = resetAll(accumulateButton: &accumulateButtonString)
            buttonStatusInitial()
        default: //연산자 기호 처리 case
            if numberButtonTapped {
                operatorButton(operatorButtonText: buttonTitle)
                operationButtonTapped.toggle()
                numberButtonTapped = false
            }
        }
    }

이렇게 변경된 상태로 코드리뷰를 진행하다가 팀원중 한분이
"이렇게 되면 두자리수 연산이 불가능해 보입니다" 라고 해주셨습니다.

실제로 실행해보니 팀원분이 말씀주신대로 두자리를 입력한 이후에는 연산자 버튼이 눌리지 않았습니다...

실행 흐름대로 가보면 이렇습니다.
숫자버튼을 누른다
numberButtonTapped = true로 변경
숫자버튼을 누른다
numberButtonTapped = false로 변경

이렇게 짝수 자리수가 입력 되어버리면 numberButtonTapped = false 상태이기 때문에
연산자 기호 처리 case가 실행이 안되었던것입니다.

그냥 어디서 보고 무지성으로 쓰다보니까 이런결과가 나왔습니다..

제가 이 로직에서 의도한 바는
"숫자 버튼이 눌려야만 연산자 기호를 입력할수 있다" 이니까
계속 지속적으로 값이 변경되는게 아닌 숫자버튼이 눌리면 버튼의 상태는 true 이다. 라는 의미를 가진 코드로 되돌렸습니다.
toggle()을 쓰기전 코드로요!

코드를 읽으면서 로직 검증하는게 아직은 힘드네요ㅠㅠ
아무튼 이럴때 쓰는 코드는 아니였다는걸 알게됐습니다..!
이 메서드는 똑딱똑딱 스위치 처럼 작동합니다!
조금 더 신중하게 생각하고 코드를 작성해야겠어요!

피드백 주신 팀원분 정말 감사합니다!

profile
기술로부터 소외 되는 사람이 없도록 우리 모두를 위한 서비스를 만들고 싶습니다.

0개의 댓글

관련 채용 정보