-
iOS [Swift] - Delegate로 State Observing하기iOS Develop 2022. 12. 2. 17:27반응형
이번 포스팅은 Delegate Patter으로 State를 주시하다가 Update 해주는 방법을 알아보도록 하겠습니돠!
우리가 ViewModel에 작업을 지시해놓고 작업이 다 처리가 되면, View라던지 Data를 업데이트 해줘야하는 경우가 있는데요!
그럴 때 사용할 수 있는 방법 중 하나로 Delegate 패턴을 사용해보겠습니다.
대략 정리를 해보자면,
ViewController
- Protocol 채택 (각 상태 별 case 구현)
- viewModel 변수 생성 및 호출
- viewModel delegate 위임자 설정
- state에 따른 update 처리
ViewModel
- Protocol 정의 [ didUpdateState() ]
- enum 정의 (상태 값으로 사용될 case 정의)
- state 변수 생성 (didSet으로 상태 변경 감지)
ViewController에 delegate를 위임한 상태에서, ViewModel은 상태 변경을 감지하고 ViewModel 메소드에서 상태 값을 변경하면 ViewController에서 delegate로 받아 업데이트를 시켜주는 구조입니다.
// LoginViewModel protocol LoginDelegate { func didUpdateState(to state: LoginState) } enum LoginState { case loginSucceed case loginFailure case wait } class LoginViewModel { var state: LoginState = .wait { didSet { self.delegate?.didUpdateState(to: self.state) } } var delegate: LoginDelegate? = nil // State 값을 변경 시켜줄 함수 code ... }// LoginViewController class LoginViewController: UIViewController, LoginDelegate { func didUpdateState(to state: LoginState) { switch state { case .loginSucceed: // 상태에 따른 뷰 업데이트 및 다른 처리 loginSucceed() case .loginFailure: loginFailure() case .wait: wait() } } var viewModel: LoginViewModel? override func viewDidLoad() { super.viewDidLoad() viewModel = LoginViewModel() viewModel?.delegate = self } // View update 또는 Data 수정 code ... }이렇게 간단하게나마 상태를 옵저빙하고 감지한 순간 update를 처리해주는 과정을 살펴보았습니다. 크게 구조를 파악해두면 여기 저기 휘뚜루 마뚜루 이용하기 넘 좋은 것 같습니당!!
감사합니다!! :-) 안농~
'iOS Develop' 카테고리의 다른 글
오픈 소스 공유 - Sliding Tab Bar (0) 2022.12.26 iOS [Swift] - Coordinator Pattern (1) (0) 2022.12.19 iOS [Swift] - Promises (0) 2022.12.02 iOS [SwiftUI] - @EnvironmentObject 사용하기 (0) 2022.09.28 iOS [Swift] - App Version 정리 (0) 2022.07.28