BehaviorSubject delete value on Swift 4 RxSwift 4

swift4
ios

#1

Доброго времени суток.
Уважаемые Swift’еры подскажите как удалить значение из BehaviorSubject

В предыдущей версии RxSwift был Variable(_ value:). В четвертой он уже depricate’нулся и нужно использовать BehaviorSubject

Пример использования Variable:

let sections = 
    Variable( [
        SectionOfCustomData(header: "First section", items: [CustomData(anInt: 0, aString: "zero", aCGPoint: CGPoint.zero), CustomData(anInt: 1, aString: "one", aCGPoint: CGPoint(x: 1, y: 1)) ]),
        SectionOfCustomData(header: "Second section", items: [CustomData(anInt: 2, aString: "two", aCGPoint: CGPoint(x: 2, y: 2)), CustomData(anInt: 3, aString: "three", aCGPoint: CGPoint(x: 3, y: 3)), CustomData(anInt: 4, aString: "four", aCGPoint: CGPoint(x: 4, y: 4)) ])
    ])

tableView.rx
    .itemDeleted
    .subscribe(onNext: { [unowned self] (element) in
        self.sections.value[element.section].items.remove(at:element.row)
    })
    .disposed(by: bag)

В примере удаление ячейки из таблицы с секциями

Как сделать то же с применением BehaviorSubject вместо Variable?


#2

Ваш пример ужасен :slight_smile: Почитайте про ФП и побочные эффекты.

struct SectionOfCustomData { var items: [String] }

let sections = BehaviorSubject(
    value: [
        SectionOfCustomData(items: ["1"]),
        SectionOfCustomData(items: ["1", "2"]),
    ]
)

let itemDeleted = BehaviorSubject(value: IndexPath(row: 0, section: 1))

itemDeleted.withLatestFrom(sections, resultSelector: { ($0, $1) }).map {
    var (indexPath, sections) = $0
    sections[indexPath.section].items.remove(at: indexPath.row)
    return sections
}.bind(to: sections)

sections.bind {
    print("\($0)")
}