[SOPT 30th iOS] 1주차 과제

8010 단어 iOSSOPTSOPT

🌱 작업한 내용

: 인스타그램 클론코딩. 로그인 화면 및 회원가입 화면 구현
스토리보드 이용

기본 과제

  • UI 구현 ( 로그인 화면 / 회원가입 화면 / 완료 화면 )
  • 화면 전환
  • 데이터 전달

도전 과제

  • TextField에 값 입력시 버튼 띄우기
  • TextField에 값이 모두 입력된 경우 로그인 버튼 활성화

심화 과제

  • 로그인 화면 : 눈 모양 아이콘 클릭시 비밀번호 노출 여부 결정

📸 스크린샷

구현 내용스크린샷
로그인 화면
회원가입 화면

📌 공부해야할 부분

  • 클로저
  • 옵셔널 / 옵셔널 바인딩
  • 값 전달은 어떤 방식으로 하는게 좋을지
    : 이 부분은 프로젝트 규모가 커졌을때 UserDefault / 싱글톤 패턴에 대해 더 공부해보면 좋을 것 같다 (은주선배의 블로그 참고 ..😇)
  • 재활용되는 코드 익스텐션으로 빼두기

📍 수정 포인트

  • 다음 화면에서 넘어올 때 textField 값 비워주기
    (viewWillApear함수에서 호출해주기)
override func viewWillAppear(_ animated: Bool) {
      super.viewWillAppear(animated)
      resetTextField()
  }
  
 private func resetTextField(){
      emailTextField.text?.removeAll()
      passwordTextField.text?.removeAll()
 }
  • textField 두 개에 다 값이 있는 경우에만 버튼이 비활성화 되는데, 값이 들어갔다가 다 지워진 경우에도 비활성화 되는 조건 추가해주기
  private func setUpClearBtnStatus(){
        guard let isEmailTextFieldEmpty = emailTextField.text?.isEmpty else { return }
        clearButton.isHidden = !isEmailTextFieldEmpty
  }

  @objc func textFieldEditingChanged(_ textField: UITextField) {
        setUpClearBtnStatus()
        loginButton.isEnabled = ![emailTextField, passwordTextField].compactMap {
            $0.text?.isEmpty
        }.contains(true)
  }
  • 리팩토링
private func setUpClearBtnStatus(){
   let isEmailTextFieldEmpty = emailTextField.text?.isEmpty == true
   if(!isEmailTextFieldEmpty){
   		clearButton.isHidden = false
   }
}

 /*
   guard let setEmailTextField = !isEmailTextFieldEmpty else {
        clearButton.isHidden = false
   }
 */

리팩토링이라고 말하기는 부끄럽지만
주석 처리해둔 대로 코드를 작성하고 싶었는데 사용할 수 없었다

왜냐 ?
guard let 구문을 if문쯤으로 생각했기 때문이다 ..😇
!isEmailTextFieldEmpty 부분은 nil / !nil을 구분하는건데 ..

Optional Binding에 대해 나름 열심히 공부한덕에

 private func setUpClearBtnStatus(){
     guard let isEmailTextFieldEmpty = emailTextField.text?.isEmpty else { return }
     clearButton.isHidden = !isEmailTextFieldEmpty
 }

최종적으로는 이렇게 수정하였다

너무 많이 배워가는 한 주 !

좋은 웹페이지 즐겨찾기