Фильтр BehaviorRelay array rxswift - PullRequest
2 голосов
/ 14 июля 2020

У меня есть BehaviorRelay с массивом FamilyTaskCoreData внутри него. В FamilyTaskCoreData у меня есть параметр «владелец», и я хочу отфильтровать массив, в котором он имеет идентификатор "45332523dqwd" или другой запрос.

Это мой BehaviorRelay:

private var familyTask = BehaviorRelay<[FamilyTasksCoreData]>(value: [])

И это код, который я использую для его привязки:

let item = memberData.getTaskData(memberID: queryID)

    item
    .filter(
        $0.filter{ $0.name.hasPrefix("M")}
    )
    .bind(to: tableView.rx.items(cellIdentifier: "familyCleaningPlanCell", cellType: FamilyCleaningPlanTableViewCell.self)) {[weak self] (row, element, cell) in

        cell.titleLabel.text = element.title
        cell.checkMarcButton.isSelected = element.status
        cell.categoryImage.image = self?.defineImage(name: element.category ?? "")

        self?.updateAnItem(cell: cell, data: element)

    }.addDisposableTo(disposeBag)
}

Я попытался отфильтровать его с помощью оператора filter ... потому что я видел его по другому вопросу, но не могу найти что-то после $ 0 .. в моем случае нет значения, которое я могу выбрать.

FamilyTasksCoreData:

@NSManaged public var category: String?
@NSManaged public var end: Date
@NSManaged public var id: String?
@NSManaged public var start: Date
@NSManaged public var status: Bool
@NSManaged public var title: String?
@NSManaged public var createdAt: Date
@NSManaged public var owner: String?
@NSManaged public var familyID: String?

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

Если я правильно понимаю, вы хотите, чтобы tableView отображал только объекты FamilyTasksCoreData, имена которых начинаются с «M».

Для этого вам нужно использовать map на реле вместо а filter. Если вы используете filter на реле, вы отфильтруете весь массив сразу, а не отдельные элементы.

Вместо этого вы хотите использовать map в преобразование каждый массив, который вы получаете от реле, отфильтровывая элементы, которые не начинаются с "M".

Ваш код должен выглядеть примерно так:

item
    .map {
        $0.filter { $0.name.hasPrefix("M") }
    }
    .bind(...
0 голосов
/ 14 июля 2020

Вам нужно использовать один фильтр для фильтрации вашего массива

item.filter{ $0.owner.hasPrefix("M")}
...