Skip to content

Instantly share code, notes, and snippets.

@GeekTree0101
Created May 22, 2019 15:14
Show Gist options
  • Save GeekTree0101/263c5216569518b65524c808ec28edfb to your computer and use it in GitHub Desktop.
Save GeekTree0101/263c5216569518b65524c808ec28edfb to your computer and use it in GitHub Desktop.
RxVIP Test
protocol MonkeyInteractorLogic: class {
var request: PublishRelay<MonkeyModel.Request> { get set }
}
class MonkeyInteractor: MonkeyInteractorLogic {
var presenter: MonkeyPresenterLogic? {
get {
fatalError("Do not get presenter logic")
}
set(targetLogic) {
disposeBag = DisposeBag()
guard let targetLogic = targetLogic else { return }
self.configure(targetLogic)
}
}
public var request: PublishRelay<MonkeyModel.Request> = .init()
private var disposeBag = DisposeBag()
private func configure(_ presenter: MonkeyPresenterLogic) {
request
.map { _ in return MonkeyModel.Response() }
.bind(to: presenter.response)
.disposed(by: disposeBag)
}
}
struct MonkeyModel {
struct Request {
}
struct Response {
}
struct ViewModel {
}
}
protocol MonkeyPresenterLogic: class {
var response: PublishRelay<MonkeyModel.Response> { get set }
}
class MonkeyPresenter: MonkeyPresenterLogic {
var viewController: MonkeyDisplayLogic? {
get {
fatalError("Do not get display logic")
}
set(targetLogic) {
disposeBag = DisposeBag()
guard let targetLogic = targetLogic else { return }
self.configure(targetLogic)
}
}
var response: PublishRelay<MonkeyModel.Response> = .init()
private var disposeBag = DisposeBag()
private func configure(_ viewController: MonkeyDisplayLogic) {
response.map { _ in return MonkeyModel.ViewModel() }
.bind(to: viewController.viewModel)
.disposed(by: disposeBag)
}
}
protocol MonkeyDisplayLogic: class {
var viewModel: PublishRelay<MonkeyModel.ViewModel> { get set }
}
class MonkeyViewController: UIViewController & MonkeyDisplayLogic {
// UI Components
private var buttonView = UIButton.init(frame: .zero)
// DisplayLogic
var viewModel: PublishRelay<MonkeyModel.ViewModel> = .init()
// Interactor
private var interactor: MonkeyInteractorLogic!
private let disposeBag = DisposeBag()
required init() {
super.init(nibName: nil, bundle: nil)
self.configureVIPCycle()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func configureVIPCycle() {
let viewController = self
let interactor = MonkeyInteractor.init()
let presenter = MonkeyPresenter.init()
viewController.interactor = interactor
interactor.presenter = presenter
presenter.viewController = viewController
}
override func viewDidLoad() {
super.viewDidLoad()
buttonView.rx.tap.map { _ in return .init() }
.bind(to: interactor.request)
.disposed(by: disposeBag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment