Created
February 24, 2023 09:20
-
-
Save daniyalyousuf07/d5d8e59a8e01c8dba721800f926d104f to your computer and use it in GitHub Desktop.
A demo of dependency injection - loose coupling - change details without affecting abstraction.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @MainActor | |
| class CommentViewModel: ObservableObject { | |
| let serviceHandler: CommentViewServiceDelegate | |
| let databaseHandler: CommentsDelegate | |
| let mainDispatchQueue: DispatchQueueType | |
| init(serviceHandler: CommentViewServiceDelegate = CommentViewService(), | |
| databaseHandler: CommentsDelegate = DatabaseHandler(), | |
| mainDispatchQueue: DispatchQueueType = DispatchQueue.main) { | |
| self.databaseHandler = databaseHandler | |
| self.serviceHandler = serviceHandler | |
| self.mainDispatchQueue = mainDispatchQueue | |
| } | |
| @Published var comments = [CommentModel]() | |
| func fetchComments() { | |
| if isConnected() { | |
| serviceHandler.getComments { result in | |
| DispatchQueue.main.async { | |
| switch result { | |
| case .failure(let error): | |
| print(error) | |
| case .success(let comments): | |
| self.comments = comments | |
| } | |
| } | |
| } | |
| } else { | |
| databaseHandler.getComments {[weak self] result in | |
| self?.mainDispatchQueue.async { | |
| switch result { | |
| case .failure(let error): | |
| print(error) | |
| case .success(let comments): | |
| self?.comments = comments | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment