Skip to content

Latest commit

 

History

History
115 lines (74 loc) · 4.39 KB

4thSeminarAssignment.md

File metadata and controls

115 lines (74 loc) · 4.39 KB

- 서버통신 by Alamofire 🎉

🟢 4차 도전과제 리뷰! 🟢

실행 gifs


  1. UserDefault를 이용한 미니DB 이용하기 - (CoreData)
  2. Delegate를 이용해 VC간 데이터 전달하기 - (KVO, Notification Center)

✏️자동 로그인 설정✏️

로그인 성공 시, UserDefault로 저장할 객체는 Id, PassWord, Token입니다.

⭕️ 1. UserDefault

사용자의 기본적인 데이터베이스 인터페이스입니다. key와 Value값을 쌍으로 저장합니다.

장점

  • 사용하기 편리합니다.
    삽입 : UserDefaults.standard.set()
    삭제 : UserDefaults.standard.removeObject()
  • Signleton이므로 런타임중 어디서나 접근 가능합니다.
  • 다양한 값을 다룰 수 있습니다.

단점.

  • 표준 데이터만 저장할 수 있습니다. 커스텀한 Object는 일반적으로 저장할 수 없습니다.
  • 앱 실행속도에 영향을 끼칩니다. UserDefault는 사용되기 전에 데이터를 모두 동기화해서 로드하므로, DB처럼 사용하는 경우에는 비효율적입니다.

따라서, UserDefault에는 필요한 데이터만 적재적소에 사용해야 합니다!

제가 사용한 BEMCheckBox는 해당 버튼의 체크 유무를 다음과 같이 구분합니다. BEMCheckBox.on(off)

if self.autoLoginButton.on {
                    UserDefaults.standard.set(inputID, forKey: "id")
                    UserDefaults.standard.set(inputPWD, forKey: "pwd")
                }

로그인 통신이 성공했으며, autoLoginButton이 체크된 상황에는 UserDefault에 아이디와 패스워드를 저장합니다.
다음, 저장된 토큰과 Id, PassWord는 앱이 재 실행될때 다음과 같은 코드를 마주합니다.

    func autoLogin() {
        if let userId = UserDefaults.standard.string(forKey: "id") {
            let uid = userId
            guard let pwd = UserDefaults.standard.string(forKey: "pwd") else { return }

            autoButtonClick(uid, pwd)
        }
    }

id라는 key값이 존재하면 앱이 실행될 때 위와같은 함수가 실행됩니다. 키값이 없으면 실행되지 않습니다.
CocoaPods등 버튼 세팅과 위 함수를 ViewDidLoad()에 위치시키면 정상적으로 자동 로그인을 할 수 있습니다.

실행되는 함수 autoButtonClick(~)은 이어서 설명하겠습니다!

✏️회원가입 뒤 자동으로 로그인 구현✏️

⭕️ 2. Delegate

다른 객체간 함수의 전달 방법은 여러가지가 있지만 (Notification Center, KVO), Delegate를 이용하여
객체간 정보 전달을 완성해보겠습니다!

Delegate는 다음과 같은 특징을 가지고 있습니다.

  • protocol로 구현할 것
  • 대신 처리하는 객체 - A, 처리를 시키는 객체 B 두 객체로 구성

내용이 조금 어려울 수 있으나, A는 하청을 받는 객체, B 는 하청을 시키는 객체!간의 관계라는 점!

왼쪽 : 하청을 받는 A, 오른쪽 : 하청을 시키는 B

B 의 회원가입을 누르면, A 객체가 일을 받아서 로그인 버튼을 눌러야 하기 때문입니다.

가장 먼저, 두 객체간 연결다리를 할 Delegate를 선언합니다.

protocol signUpAndAutoLoginDelegate {
    func autoButtonClick(_ id: String, _ pwd: String)
}

예상컨데, B 객체에서 위 함수를 통해 idpwd를 넘겨줄 것입니다.

A Controller : UIViewController, signUpAndAutoLoginDelegate {

}

위와 같이 A Controller에서 signUpAndAutoLoginDelegate를 채택합니다. 필수적으로 구현해야 하는 함수는

func autoButtonClick(_ id: String, _ pwd: String)
    {
        txtFields[0].text = id
        txtFields[1].text = pwd
        loginButton.sendActions(for: .touchUpInside)
    }

입니다. 따라서 B 객체를 통해 받아온 id, pwd로 LoginButton에 접근하게 됩니다.
전체적인 흐름은 위와 같습니다. 틀린 개념이 있거나, 모르는 것이 있다면 언제든지 말씀해 주세요!