6 заметок с тегом
RxSwift
Driver
18 ноября 2019, 8:20
Дравйвер
классная вещь в RxSwift, позволяет:
- Восстанавливаться от ошибок.
- Является Observable
- Автоматически переводит подписку drive в Main thread, что делает его идеальным для UI
- Описывать обработку ошибок внутри, не передавая ошибку по цепочке.
... asDriver() .drive({ value in }) ...
RxSwift кастомная View'ха
7 марта 2019, 4:03
Пишем своё расширение кастомной вьюхи.
import UIKit import RxSwift import RxCocoa class CustomControl: UIControl { var value: Int = 0 { didSet { sendActions(for: .valueChanged)} } override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func toggle() { if value == 0 { backgroundColor = .green value = 1 } else { backgroundColor = .red value = 0 } } } extension Reactive where Base: CustomControl { var value: ControlProperty<Int> { return base.rx.controlProperty(editingEvents: UIControlEvents.valueChanged, getter: { customView in return customView.value }, setter: { customView, newValue in customView.value = newValue }) } }
И теперь использовать можно так
customView.rx.value .subscribe(onNext: { value in print("changed my value -> \(value)") }) .disposed(by: bag)
RxSwift: создаём реактивное расширение
12 января 2019, 13:34
Расширение
extension Reactive where Base: NSView { public var alphaValue: ControlProperty<CGFloat> { let source = self.observeWeakly(CGFloat.self, "alphaValue", options: [.initial, .new]) .filter { $0 != nil }.map { $0! } .takeUntil(deallocated) let observer = Binder<CGFloat>(base) { control, value in control.alphaValue = value } return ControlProperty(values: source, valueSink: observer) } }
Применение
подписываемся на изменения переменной
view.rx.alphaValue.subscribe(onNext: { value in print("val->", value) }) .disposed(by: disposeBag)
меняем значение по слайдеру
slider.rx.value.subscribe({ [weak self] item in let newValue = Int( item.element ?? 0 ) self?.view.alphaValue = newValue }) .disposed(by: disposeBag)
RxSwift: Создание реактивной переменной
12 января 2019, 13:22
Код должен быть прозрачным
import RxSwift
Способ 1
Создаём переменную
var hitPoints = Variable<Int>(10)
Изменение значение переменной
card.hitPoints.value = hp
Подписка на изменение
card.hitPoints.asObservable().subscribe(onNext: { [weak self] value in print("Your hit points ->", value) self?.labelHitPoints.stringValue = "\(value)" }) .disposed(by: bag)
Способ 2
Создаём переменную
var rxMana = BehaviorRelay<Int>(value: 0)
Вешаем обработчик на реактивную переменную
self.rxMana.subscribe(onNext: { value in print("Your level mana ->", value) }) .disposed(by: disposeBag)
Ну и где-нить меняем значение переменной
rxMana.accept(newValue)
Маленькая памятка по созданию реактивной переменной
29 сентября 2017, 12:06
Подключаем реактивный свифт
import RxSwift
Создаём «сумку» для мусора, при деините объекта все ссылки из этой сумки будут корректно зачищены
let bag = DisposeBag()
Инитим переменную и её наблюдатель
var reactiveVariable = Variable<Int>(1) var nabludatel = PublishSubject<Int>()
...
reactiveVariable.asObservable() .bind(to: nabludatel) .disposed(by: bag) nabludatel.asObservable() .bind { print("called when changed var -> \($0)") } .disposed(by: bag)
Применяем
reactiveVariable.value = 31337