Skip to content

Instantly share code, notes, and snippets.

@daniyalyousuf07
Created February 24, 2023 09:20
Show Gist options
  • Select an option

  • Save daniyalyousuf07/d5d8e59a8e01c8dba721800f926d104f to your computer and use it in GitHub Desktop.

Select an option

Save daniyalyousuf07/d5d8e59a8e01c8dba721800f926d104f to your computer and use it in GitHub Desktop.
A demo of dependency injection - loose coupling - change details without affecting abstraction.
@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