[SOPT 30th iOS] 1주차 과제
🌱 작업한 내용
: 인스타그램 클론코딩. 로그인 화면 및 회원가입 화면 구현
스토리보드 이용
기본 과제
- 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
}
최종적으로는 이렇게 수정하였다
너무 많이 배워가는 한 주 !
Author And Source
이 문제에 관하여([SOPT 30th iOS] 1주차 과제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bovet/SOPT-30th-iOS-1주차-과제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)