RxSwiftを使ってUISearchBarに入力した文字を取得する
の続編
インクリメントサーチしたいと思ってもろもろ調べた結果
RxSwiftでUiTableViewと連携できると知ったのでやってみた
・コード
これで入力した内容がそのままテーブルに表示される
class ViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
private let CELL_NAME = "Cell"
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
searchBar.rx.text.orEmpty
.throttle(.milliseconds(300), scheduler: MainScheduler.instance)
.distinctUntilChanged()
.flatMapLatest { query -> Observable<[String]> in
return .just([query])
}
.observeOn(MainScheduler.instance)
.bind(to: tableView.rx.items) {[weak self]_tableView, row, element in
let cellName = self?.CELL_NAME ?? ""
let cell = _tableView.dequeueReusableCell(withIdentifier: cellName) ?? UITableViewCell(style: .subtitle, reuseIdentifier: cellName)
cell.textLabel?.text = element.description
return cell
}
.disposed(by: disposeBag)
}
}
・コードの説明
Observable<[String]>でStringの配列
bind toで連携する
[weak self]は弱参照にするとのこと
・ちなみに
以下にするとインクリメントされた入力が全部表示される
これはこれで面白いけど、リストで渡すのが前提なんだなぁって思った
後どんどん追加されるけど消し方わからん
.flatMapLatest { query -> Observable<String> in
return .just(query)
https://github.com/ReactiveX/RxSwift
https://qiita.com/susieyy/items/f57f9362b8e0a89023cb