BaseProvider.swift 831 B

1234567891011121314151617181920212223242526272829303132
  1. import Combine
  2. import Foundation
  3. import Swinject
  4. protocol Provider {
  5. init(resolver: Resolver)
  6. var user: CurrentValueSubject<User?, Never> { get }
  7. }
  8. class BaseProvider: Provider, Injectable {
  9. let user = CurrentValueSubject<User?, Never>(nil)
  10. var lifetime = Set<AnyCancellable>()
  11. @Injected() var authorizationManager: AuthorizationManager!
  12. required init(resolver: Resolver) {
  13. injectServices(resolver)
  14. subscribe()
  15. }
  16. private func subscribe() {
  17. authorizationManager.credentials
  18. .map { credentials -> User? in
  19. guard let credentials = credentials else { return nil }
  20. return User(id: credentials.id)
  21. }
  22. .sink { user in
  23. self.user.send(user)
  24. }
  25. .store(in: &lifetime)
  26. }
  27. }