Conversation
…feature/#138-resign
longlivedrgn
left a comment
There was a problem hiding this comment.
주현 완전 고생많았따!..🫠 우리 로그인과 회원가입 로직 부분이 점점 복잡해지고 있네... 어려운 소셜 ㅗ그인..🥲
고생했오 주현~!
| private func bindUserDefaults() { | ||
| UserDefaults.standard.rx | ||
| .observe(String.self, UserDefaultsKey.accessToken.rawValue) | ||
| .asDriver(onErrorJustReturn: nil) | ||
| .drive(with: self) { owner, accessToken in | ||
| guard let accessToken = accessToken else { return } | ||
|
|
||
| if accessToken.isEmpty { | ||
| self.output.checkingTicketCount.accept(-1) | ||
| } else { | ||
| self.fetchCheckingTickets() | ||
| } | ||
| } | ||
| .disposed(by: self.disposeBag) |
There was a problem hiding this comment.
이 부분이 주현이가 말한 UserDefaults+Rx부분인구나!
Userdefaults를 저렇게 가져올 수 있는 거는 처음 봤네 신기하네! 새로운 거 알아갑니다..🙇♂️
만약 우리가 저런 식으로 UserDefaults의 값을 가져온다면, 기존에 우리가 propertyWrapper로 감싼 UserDefault가 필요없을 거 같아!
// UserDefault<T>
var wrappedValue: T {
get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }
set { UserDefaults.standard.set(newValue, forKey: key) }
}기존에 우리가 UserDefaults의 값을 손쉽게 가져오고 재설정하려구 위와 같이 코드를 작성해줬는데, UserDefaults rx를 활용할 경우, 위와 같은 코드가 필요가 없어지는 느낌이 있는 거 같아! 즉, 역할이 살짝 중복된다는 느낌이 있오!
그리고 내가 viewWillAppear 이벤트를 트리거로 삼아서 UserDefaults를 가져온 이유는 크게 두 가지였어!
- VM과 VC의 분리 => VC가 VM의 메소드를 실행시킨다기보다는 VC는 자신이 appear되었다는 이벤트만 VM에게 알리고, VM이 코어한 로직을 다 수행하는 거지!
- viewWillAppear를 통해서 로그인 후, 다시 UserDefaults를 확인할 수 있게 하는 로직 구현 가능. => 처음에는 로그인을 하지 않아서 공연이 비어져있지만, 로그인을 하고 왔을 때는 다시 update를 해서 화면을 띄어줘야하잖아! 그럴 때, viewWIllAppear라는 Event와 맞물려서 access token을 확인하는 것이 조금 더 자연스럽다고 생각했오! 어차피 해당 로직을 viewWillAppear에 넣어줄거라면 rx로 감싸서 쓰는거지!
There was a problem hiding this comment.
현재 흐름으로 보면 accessToken 확인하는 건 viewWillAppear와 맞물려서 하는 게 더 좋을 거 같긴 하다!
내가 UserDefaults+Rx를 찾아봤을 때의 생각은 아래와 같아! 결론적으로 다르게 써보긴 했지만 ..ㅎㅎ
- 홈(공연 리스트) 화면에 닉네임을 패치하는 부분이 있는데 viewWillAppear를 탈 때마다 userDefaults에서 가져온 값을 넣어주고 있거든! 근데 userDefaults에 계속 접근하는게 비효율적이라고 생각했어!
- wrappedValue는 변화 감지를 못하기 때문에 viewWillAppear에서 값을 가져오는 거라
UserDefaults+Rx로 값 변화를 감지해서 viewDidLoad(VC) 또는 init(VM) 에서 한 번만 설정하면 되기 때문이야!
| override func viewWillDisappear(_ animated: Bool) { | ||
| self.tabBarController?.tabBar.isHidden = false | ||
| } | ||
|
|
| owner.entryCodeButton.isHidden = true | ||
| } else { | ||
| // 오늘 공연 여부에 따라 숨김 처리 | ||
| owner.entryCodeButton.isHidden = ticketDetailItem.date.formatToDate().getBetweenDay(to: Date()) != 0 | ||
| } |
|
|
||
| func resign() -> Observable<String?> { | ||
| let provider = ASAuthorizationAppleIDProvider() | ||
| let request = provider.createRequest() | ||
|
|
||
| let authorizationController = ASAuthorizationController(authorizationRequests: [request]) | ||
| authorizationController.performRequests() | ||
|
|
||
| return authorizationController.rx.appleUserInfoDelegate | ||
| .map { userInfo in | ||
| guard let userInfo else { throw Error.userInfoNotFound } | ||
| return userInfo.authorizationCode | ||
| } | ||
| } |
There was a problem hiding this comment.
appleIdAuthorizationCode 요걸 넘겨줘야되는구나! 👍👍
뭔가 그냥 Core Data나 Swift Data에 저장해두고, 꺼내쓸까도 생각했는데에 해당 값이 바뀌나? 근데 그냥 이렇게 한번 더 불러오는 게 좋은 거 같다아!
There was a problem hiding this comment.
appleIdAuthorizationCode 요게 5분마다 변경된다고 하더라구! 그래서 탈퇴 직전에 로그인해서 받아와야 했어 ..!!
작업한 내용
스크린샷
관련 이슈