I am a beginner in ReactiveSwift I have a UICollectionView. My aim is to filter / edit the Observable array of the UICollectionView. After getting no results with filtering, I print it out after trying to filter, the filter count is correct but there's a type mistake I guess.
items >> RxSwift.(unknown context at $1024d7ea8).Map<Swift.Array<ReactiveThings.AnotherController.Element>, Swift.Array<ReactiveThings.AnotherController.Element>>
These are output.
DispatchQueue.main.asyncAfter(deadline: .now() + 3.5) {
let items = observableElement.asObservable().map { element in
element.filter {
$0.age > 15
}
}
print("items >> ", items)
}
Here are my code.
import UIKit
import RxSwift
import RxCocoa
public final class AnotherController: UIViewController, UICollectionViewDelegateFlowLayout {
let disposeBag = DisposeBag()
var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
var cv = UICollectionView.init(frame: .zero, collectionViewLayout: layout)
cv.translatesAutoresizingMaskIntoConstraints = false
return cv
}()
private func setup() {
view.addSubview(collectionView)
collectionView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
collectionView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
collectionView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "CustomCelly")
collectionView.rx.setDelegate(self).disposed(by: disposeBag)
var observableElement = Observable.just(elementArray)
observableElement.bind(to: collectionView.rx.items(cellIdentifier: "CustomCelly")) { _, eleman, cell in
if let cellToUse = cell as? UICollectionViewCell {
cellToUse.backgroundColor = .red
}
}.disposed(by: disposeBag)
DispatchQueue.main.asyncAfter(deadline: .now() + 3.5) {
let items = observableElement.asObservable().map { element in
element.filter {
$0.age > 15
}
}
print("items >> ", items)
}
}
struct Element {
let name: String
let age: Int
}
var elementArray = [
Element.init(name: "E0", age: 15),
Element.init(name: "E1", age: 12),
Element.init(name: "E2", age: 13),
Element.init(name: "E3", age: 14),
Element.init(name: "E4", age: 17),
Element.init(name: "E5", age: 18)
]
public override func viewDidLoad() {
super.viewDidLoad()
setup()
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 100)
}
I want to achieve manipulate the data after an action for example after a UIButton click, the count of the model array may reduce 3 from 6.
Thanks in advance