Skip to content

Instantly share code, notes, and snippets.

@danielt1263
Created November 2, 2021 01:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielt1263/af153c6854522a87c1dc54a549ad90d8 to your computer and use it in GitHub Desktop.
Save danielt1263/af153c6854522a87c1dc54a549ad90d8 to your computer and use it in GitHub Desktop.
//: A UIKit based Playground for presenting user interface
import UIKit
import RxSwift
import RxCocoa
import PlaygroundSupport
import Cause_Logic_Effect
PlaygroundPage.current.liveView = CounterViewController().configure { $0.connect() }
final class CounterViewController: UIViewController {
var decrementButton: UIButton!
var countLabel: UILabel!
var incrementButton: UIButton!
let disposeBag = DisposeBag()
override func loadView() {
super.loadView()
view.backgroundColor = .white
decrementButton = UIButton(type: .system).setup {
$0.setTitle("-", for: .normal)
}
countLabel = UILabel().setup {
$0.font = .monospacedDigitSystemFont(ofSize: 17, weight: .medium)
}
incrementButton = UIButton(type: .system).setup {
$0.setTitle("+", for: .normal)
}
let rootStackView = UIStackView(arrangedSubviews: [
decrementButton,
countLabel,
incrementButton,
]).setup {
$0.translatesAutoresizingMaskIntoConstraints = false
}
view.addSubview(rootStackView)
NSLayoutConstraint.activate([
rootStackView.centerXAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),
rootStackView.centerYAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerYAnchor),
])
}
}
extension CounterViewController {
func connect() {
CounterLogic.counter(
increment: incrementButton.rx.tap.asObservable(),
decrement: decrementButton.rx.tap.asObservable()
)
.bind(to: countLabel.rx.text)
.disposed(by: disposeBag)
}
}
enum CounterLogic {
static func counter(increment: Observable<Void>, decrement: Observable<Void>) -> Observable<String> {
Observable.merge(
increment.map(to: 1),
decrement.map(to: -1)
)
.scan(0) { $0 + $1 }
.startWith(0)
.map { "\($0)" }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment