Няма описание

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // User.swift
  3. // Flowerdex
  4. //
  5. // Created by Víctor A. Hernández on 12/20/20.
  6. //
  7. import Foundation
  8. class User: Codable, Identifiable { // not a hashable struct anymore :(
  9. // REFERENCE: https://www.makeschool.com/academy/track/build-ios-apps/build-a-photo-sharing-app/keeping-users-logged-in
  10. let id: Int?
  11. let username: String?
  12. let email: String
  13. let password: String?
  14. private static var _current: User?
  15. static var current: User {
  16. guard let currentUser = User._current else {
  17. fatalError("Error: Current user doesn't exist")
  18. }
  19. return currentUser
  20. }
  21. // TODO: implement save to keychain on wtud == false
  22. static func setCurrent(_ user: User, writeToUserDefaults: Bool = false) {
  23. if writeToUserDefaults {
  24. if let data = try? JSONEncoder().encode(user) {
  25. UserDefaults.standard.set(data, forKey: Constants.UserDefaults.currentUser)
  26. }
  27. }
  28. _current = user
  29. }
  30. static func fetchCurrent() -> User? {
  31. if let userData = UserDefaults.standard.object(forKey: Constants.UserDefaults.currentUser) as? Data,
  32. let user = try? JSONDecoder().decode(User.self, from: userData) {
  33. print("from fetchCurrent(): \(String(describing: user))")
  34. User.setCurrent(user)
  35. return user
  36. } else {
  37. return nil
  38. }
  39. }
  40. static func exists() -> Bool {
  41. let user = fetchCurrent()
  42. print("from exists(): \(String(describing: user))")
  43. if user != nil {
  44. return true
  45. } else {
  46. return false
  47. }
  48. }
  49. }