前置き
ど素人のガチでコード書いている時間は3ヶ月程度のレベルです。
プログラマー歴も同等です。(経験値少なすぎおじさん)
メモというかこの悩みと悲しみを未来永劫忘れないためのメモ(未解決事件)
RxSwiftを使ってTableViewに精神を殺された😇
何がやりたいかというと、
UIViewContoroller
にUITableView
とCell
を乗っけてるViewがある。
そのCell
に情報を入れたいだけ。(普通の使い方だよぉ...)
(NavigationControllerもいるよ)
import UIKit
import RxSwift
import RxDataSources
import RxCocoa
class mainView: UIViewController {
// StoryBoardから設定したViewController配下のUITableView
@IBOutlet weak var tableView: UITableView!
// Modelは独自で定義してた項目群
// 実際はViewModelに定義してソコから参照している
var item = BehaviorRelay<Model>(value: nil)
override func viewDidLoad() {
super.viewDidLoad()
// これは監視を仕込むための関数
subscribe()
}
// やったるでー
func sbuscribe() {
item.asObservable()
.bind(to: tableView.rx.items(cellIdentifier: identifier, cellType: tableViewCell.self)) { _, item, cell in
// Cellに対してごにょごにょする
cell.label.text = "いえーい"
}
.disposed(by: disposeBag) // 簡略
// 省略
}
オコラレタ
Xcodeはお怒りである。
Generic parameter 'Self' could not be inferred
箇所はtableView.rx.items
のrx
の部分に赤線。
すぐ翻訳しちゃうマンは翻訳をした。
汎用パラメータ 'Self'を推測できませんでした
なるほど、わからん。
謎(なぞ)
色々調べて、StoryBoardも見直して、作り直して、色々試したけど...
意味がわからなかった。
経験不足から推測ができないのは辛い。
まるで目星が立たない。
というか、別の箇所ではほぼ、同じ構成で動いているのだ。
なぜ、
そもそも、Rx
を使ったTableView
の扱い方が間違っている可能性の方が大いにある。
というか、普通のTableView
でさえ扱えきれていないのに😡
心折れそう。
追記
コメントご指摘をいただきました。
.bind(to: tableView.rx.items(cellIdentifier: identifier, cellType: tableViewCell.self)) { _, item, cell in
を記載してた、tableViewCell.self
に誤りがありました。
rx
で怒られていましたが、原因は全く関係のない箇所...
エラー箇所だけではなく、全体の構成をしっかりと意識して調査しなければなりませんね。
良い勉強となりました!
アドバイスありがとうございます