https://firebase.google.com/docs/auth/ios/manage-users?hl=ko#swift_1
Firebase에서 사용자 관리하기 | Firebase Authentication
공식문서에 따르면 사용자의 정보를 불러오는 방식에는 2가지가 있다.
if Auth.auth().currentUser != nil { // User is signed in. // ... } else { // No user is signed in. // ... }
Auth.auth().addStateDidChangeListener { auth, user in }
첫번째 방식으로 진행했을 때 왜 오류가 생기는지 알아보자.
작업 중인 스레드에서 Auth.auth().currentUser를 호출했는데 메인 스레드에서 user의 정보를 불러오는 작업까지 해버린다면,
user의 정보를 불러오는 동안 다른 작업을 할 수 없다는 비효율성이 생긴다.
때문에 다른 스레드에 해당 작업을 넘기고 user 정보를 받지 않았는데도 비교를 시작할 가능성이 있다.

하지만 지금과 같은 경우에는 user의 정보를 모두 불러오는 작업이 끝난 후 다음 작업들을 시작해야한다.
때문에 completionHandler를 가진 함수, 즉 아까 정보를 불러오는 두번째 방법을 통해서 작업한다면 오류를 해결할 수 있다.
참고: 인증 객체의 초기화가 완료되지 않아 currentUser가 null일 수도 있습니다. 리스너를 사용해 사용자의 로그인 상태를 추적하면 이런 상황을 처리할 필요가 없습니다.
공식문서에서도 해결 방법을 알려주고 있다.
하지만 첫번째 방법을 고집하는 방법도 있는데,
if Auth.auth().currentUser == nil { DispatchQueue.main.async { // task } }
메인스레드에 비동기적으로 작업을 넘겨줌으로써, 약간의 딜레이를 발생시켜 그 사이에 유저의 정보를 불러오게하는 방법도 있는것같으나..
굳이??
틀린내용 있으면 지적해주세요