Skip to content

Instantly share code, notes, and snippets.

View FitzAfful's full-sized avatar
🏠
Working from home

Fitzgerald Afful FitzAfful

🏠
Working from home
View GitHub Profile
import UIKit
import Combine
class CombineController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var emptyView: UIView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
lazy var viewModel: CombineViewModel = {
import Foundation
import Alamofire
import Combine
class CombineViewModel: ObservableObject {
var apiManager: APIManager?
@Published var employees: [Employee] = [] //1
init(manager: APIManager = APIManager()) {
import RxSwift
import RxCocoa
class RxSwiftController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var emptyView: UIView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
let disposeBag = DisposeBag()
import Foundation
import Alamofire
import RxSwift
import RxCocoa
class RxSwiftViewModel {
private let disposeBag = DisposeBag()
private let _employees = BehaviorRelay<[Employee]>(value: [])
private let _error = BehaviorRelay<Bool>(value: false)
/********* Binding to array in viewDidLoad */
viewModel.employees.bind { (_) in
self.showTableView()
}
/********************************/
func setupEventBusSubscriber() {
_ = EventBus.onMainThread(self, name: "fetchEmployees") { result in
if let event = result!.object as? EmployeesEvent {
if event.employees != nil {
self.showTableView()
} else if let message = event.errorMessage {
self.showAlert(title: "Error", message: message)
}
}
}
func callEvent() {
//Post Event (Publish Event)
EventBus.post("fetchEmployees", sender: EmployeesEvent(error: error, errorMessage: errorMessage, employees: employees))
}
import Foundation
class EmployeesEvent: NSObject {
var error: Bool
var errorMessage: String?
var employees: [Employee]?
init(error: Bool, errorMessage: String? = nil, employees: [Employee]? = nil) {
self.error = error
self.errorMessage = errorMessage
import Foundation
open class EventBus {
struct Static {
static let instance = EventBus()
static let queue = DispatchQueue(label: "EventBus", attributes: [])
}
import Foundation
import Alamofire
protocol ObservableViewModelProtocol {
func fetchEmployees()
func setError(_ message: String)
var employees: Observable<[Employee]> { get set } //1
var errorMessage: Observable<String?> { get set }
var error: Observable<Bool> { get set }
}