Проблема с обработкой выбора строки с помощью RxCocoa

Сейчас я изучаю RxCocoa для UITableView. Все работает нормально с представлением ячеек, но когда я добавляю закрытие для обработки выбора строки, появляется задержка. Я имею в виду, что когда я нажимаю первую строку, ничего не происходит, когда я нажимаю закрытие второй строки, показывает реакцию, которую я ожидал для первой строки, третьей - для второй и т. Д. Пожалуйста, взгляните на мой код и помогите мне решить проблему .

import RxCocoa
import RxRelay
import RxSwift
import UIKit

final class ListViewController: UITableViewController {
    
    private var todos = BehaviorRelay<[String]>(value: ["Clean the apt", "Learn to code", "Call mom", "Do the workout", "Call customers"])
    let bag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "RxTodoList"
        tableView.dataSource = nil
        tableView.delegate = nil
        
        todos
            .bind(to: tableView.rx.items) { (tableView, row, element) in
                let cell = tableView.dequeueReusableCell(withIdentifier: "TodoCell")!
                cell.textLabel?.text = "\(element)"
                return cell
            }
            .disposed(by: bag)
        
        tableView.rx
            .modelDeselected(String.self)
            .asObservable()
            .subscribe(onNext: { [weak self] todo in
                print(todo)
            })
            .disposed(by: bag)
    }
    
}

person Andrey Isaev    schedule 25.11.2020    source источник


Ответы (1)


Вы используете modelDeselected вместо modelSelected.

Кроме того, у вас никогда не должно быть Subject, Relay или Observable в качестве var, они всегда должны быть lets. Итак, _5 _... должно быть _6 _...

Наконец:

Использование предметов [и реле] в основном должно оставаться в сфере образцов и тестирования. Предметы - отличный способ начать работу с Rx. Они сокращают время обучения для новых разработчиков, однако вызывают ряд проблем ...

- (IntroToRx)

person Daniel T.    schedule 25.11.2020
comment
Ой! Конечно! Так неточно с моей стороны! Спасибо большое! =) - person Andrey Isaev; 27.11.2020