Apple Developer Documentation - ObservableObject
A type of object with a publisher that emits before the object has changed.
Apple Developer Documentation - Published
A type that publishes a property marked with an attribute.
ViewModel์ ๊ด์ฐฐ์ด ๊ฐ๋ฅํ๋๋ก ObservableObject๋ฅผ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ currentUser๋ฅผ ์ ์ฅํ๋ค.
class ViewModel: NSObject, ObservableObject {
@Published var currentUser: FirebaseAuth.User?
}
์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ด์ฉํด ์ด๋ฉ์ผ ๋ก๊ทธ์ธ์ ์๋ํ๋ค. error๊ฐ ๋ฐ์ํ์ ๋์๋ ์ถ๋ ฅ์ ํ๊ณ ๋๋๋๋ก return์ if๋ฌธ ๋ด๋ถ์ ์ถ๊ฐํ๋ค. result์์ ์ต์ ๋๋ก ์กด์ฌํ๋ฏ๋ก guard๋ฌธ์ ์ฌ์ฉํ์ฌ user๋ฅผ ์ ์ํ๋ค. ์ดํ user๋ฅผ currentUser์ ํ ๋นํ๋ค.
func login(withEmail email: String, password: String) {
Auth.auth().signIn(withEmail: email, password: password) { result, error in
if let error = error {
print("DEBUG: \(error.localizedDescription)")
return
}
guard let user = result?.user else { return }
self.currentUser = user
}
}
currentUser๋ฅผ ๋น์ ํ๋ก ํธ์๋๋ ์ ์ ๊ฐ ์๋ ๊ฒ์ ๋ฐ์ํ๋๋ก ํ๋ค. ์๋์ ํจ์๋ฅผ ๋ก๊ทธ์์๋ฒํผ๊ณผ ์๋์ ํจ์๋ฅผ ์ฐ๊ฒฐํด ์ฌ์ฉํ๋ค.
func signOut() {
self.currentUser = nil
try? Auth.auth().signOut()
}