[iOS / Swift] Storyboard 간단한 로그인 기능 구현(2) 코드 개선

2025. 1. 13. 20:34

지난번에 간단한 계산기앱 코드개선을 할 때 강제언래핑한 부분을 옵셔널 바인딩으로 변경하고 아이디와 패스워드를 입력하지 않았을 때

알림창(경고창)을 띄우는 코드를 추가할 것임 이건 이전 계산기앱 코드개선과 마찬가지로 하면 됨.

func showAlert(message: String) {
        let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
        
        let okAction = UIAlertAction(title: "확인", style: .default)
        alert.addAction(okAction)
        
        present(alert, animated: true)
    }

showAlert라는 함수를 선언하고 그 안에 실행코드들을 추가함 그 후에,

 @IBAction func login(_ sender: Any) {
        
        guard let id = idField.text, !id.isEmpty else {
            showAlert(message: "계정을 입력하세요.")
            return
        }
        
        guard let password = passwordField.text, !password.isEmpty else {
            showAlert(message: "비밀번호를 입력하세요.")
            return
        }

이런식으로 불러와서 message는 각자 맞는 텍스트를 작성해주면 됨.


그리고 비빌번호는 1234 처럼 보이는게 아닌 안보이는 텍스트로 해야하는데 해당 텍스트 필드를 클릭한 후에,

우측 Attributes inspector에 가서 아래에 Secure Text Entry를 체크해주면 됨.

추가로 아이디를 입력하는 곳에 편집할 때 입력 칸을 전부 지우는 버튼은 Attributes inspector에 가서 Clear Button에서 두번째를 눌러주면됨

그리고 아이디를 입력해주세요 처럼 흐리게 나오게하는 것은 placeholder에 내가 원하는 텍스트를 넣어두면

아무것도 입력하지 않은 빈칸이었을 때 저렇게 나옴


추가로 편의성을 개선해 보겠음. 화면이 표시된 직후에 아이디를 입력하는 필드를 따로 클릭하지않고도 클릭이 된상태로 하는방법임

 

// 화면이 표시된 다음에 자동으로 호출되는 메서드 => 콜백 메서드
override func viewDidAppear(_ animated: Bool) { 
        super.viewDidAppear(animated)
        
        idField.becomeFirstResponder()
        
    }

이렇게 `viewDidAppear`을 쓰고 그 아래에 `idField`에 접근하고 `becomeFirestResponder()`로 첫번째 응답자로 만들어줌

이렇게하면 해당 어플이 켜지자마자 `idField`에 접근하여 바로 키보드가 보여짐

 

특징으로는

  1. 첫 번째 응답자는 유일함
    • 앱 내에서 한 번에 하나의 객체만 첫 번째 응답자가 될 수 있음.
    • 새로운 객체가 `becomeFirstResponder()`를 호출하면 기존 응답자는 자동으로 사라짐.
  2. 응답 가능 여부 확인
    • `canBecomeFirstResponder`를 통해 객체가 첫 번째 응답자가 될 수 있는지 확인 가능. 기본적으로 `true`를 반환하지만, 필요하면 재정의 가능.
 

다음은 키보드 형식변환임.

어떤 어플에서 회원가입할 때는 키보드에 @이 있던경우도 있고 없던 경우도 있었을 것임.

그걸 Storyboard로 하는 방법은

우측 Attributes inspector에 Text Input Traits -> Keyboard Type -> Email Address를 누르게되면

키보드가 이런식으로 @가 추가가됨 굳이 왔다갔다 할 필요가 없어짐

이걸 코드로 하는 방법은?

let emailTextField = UITextField()

emailTextField.keyboardType = .emailAddress // 이메일용 키보드

이렇게 `emailTextField`에 `.keyboardType = .emailAddress`만 지정해주면 됨.


그럼 간단하게 `IUO`에 대해서 알아보겠음

// !가 앞에있으면 Logical Not임. true는 false로 false는 true로
// !가 앞에있으면 뒤에있는 형식은 항상 boolean표현식

// !가 뒤에있으면 강제 추출연산자 즉 강제 언래핑임
// optional 표현식임

// 하지만 IBOutlet weak var idField: UITextField! < 여기에 있는 !는 IUO임
// Implicitly Unwrapped Optional => 자동으로 추출되는 옵셔널임

이건 `IUO`에 대한 간단한 설명임

import UIKit

let a: Int? = 0 // 일반적인 옵셔널 타입으로 선언

let b: Int! = 0 // IUO 타입으로 선언, 그럼 언제 자동으로 추출이 되는가?? 이것을 알면됨

print(a)
print(b)

let c = a // 이거랑 아래 둘다 option을 보면 optional 타입으로 나옴
//let c: Int = a << 이건 안됨. 강제추출을 하던, 옵셔널 바인딩을 하던 직접 언래핑을 해서 저장을 해야함
//let d = b
let d: Int = b // < 이거는 됨. 왜냐? 자동으로 추출이 되는 옵셔널이기 때문임.

// 이렇게 타입을 IUO로 선언을 하게 되면 Non-optional타입으로 저장하거나, Non-optional으로 처리할 때 자동으로 언래핑이 됨.

// 대신 단점이 있음. 여기서 위의 let b: Int! = 0 을 nil로 바꾸면 크래시가 발생함
// IUO는 되도록 사용하지 않는 것이 좋음.

더 자세한건 문법을 다루는 글에서 정리하겠음.


정리

알림창 띄우는 함수선언

func showAlert(message: String) {
        let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
        
        let okAction = UIAlertAction(title: "확인", style: .default)
        alert.addAction(okAction)
        
        present(alert, animated: true)
    }

알림창 띄우는 함수 사용법

 @IBAction func login(_ sender: Any) {
        
        guard let id = idField.text, !id.isEmpty else {
            showAlert(message: "계정을 입력하세요.")
            return
        }
        
        guard let password = passwordField.text, !password.isEmpty else {
            showAlert(message: "비밀번호를 입력하세요.")
            return
        }

화면이 켜졌을 때 자동으로 키보드가 띄워지고 idTextField에 접근하는법

// 화면이 표시된 다음에 자동으로 호출되는 메서드 => 콜백 메서드
override func viewDidAppear(_ animated: Bool) { 
        super.viewDidAppear(animated)
        
        idField.becomeFirstResponder()
        
    }

이정도가 되겠음

BELATED ARTICLES

more