2016-04-10 9 views
2

私はUITableViewにデータを添付しようとしています。 http://yannickloriot.com/2016/01/make-uitableview-reactive-with-rxswift/::私は、次の操作を実行しようとRxCocoa余分な引数での呼び出し

let currentQuestion: Variable<Taxi?> = Variable(nil) 

まず、私は次の変数を作成している私は、ここでは、プロジェクトのフォームをダウンロードし、データがのtableViewに添付されたコードを使用していてい

currentQuestion 
     .asObservable() 
     .bindTo(tableView.rx_itemsWithCellIdentifier("ChoiceCell", cellType: ChoiceCell.self)) { (row, element, cell) in 
      cell.choiceModel = element 
     } 
     .addDisposableTo(disposeBag) 

しかし、次の警告が表示されます。「余分な引数がコールされました」という行の.bindTo。私は新しいセルを追加しようとして、同じ結果を得る。関連性があるかどうかはわかりませんが、セルを登録しています。

引数の型が一致しない場合、この警告が表示されることがあります。Swift - Extra Argument in call。しかし、引数がうまく一致するように見えます。

私はRxの新人です。誰かがここで間違っているかもしれないことを理解できるように助けてくれることを願っていました。ありがとう。

======

編集

ここに私の新しいコードがあります。私は一人でrx_itemsWithCellIdentifier("ChoiceCell")rx_itemsWithCellIdentifier("ChoiceCell", cellType: ChoiceCell.self)を試してみました:

私は(タクシー)を使用している
let currentQuestion = Variable<[Taxi]>(taxis) 

    currentQuestion.asObservable() 
     .bindTo(tableView.rx_itemsWithCellIdentifier("ChoiceCell")) {(row, element, cell) in 
     cell.choiceModel = element 
     }.addDisposableTo(disposeBag) 

、それはタクシーアイテムの配列です。下図を参照してください:私は.asObservable(と呼ばれていたら)また

enter image description here

を、私は次のようにあります

enter image description here

私はライン.bindToを除去することにより、これらをプリントアウトすることができました。私がその行を追加すると、以前と同じエラーが出ます。

重要:以前にリンクされた記事Iのコードベースで遊んだ。あなたは間違った期待されるデータ型の変数をバインドしようとしているとき、呼び出しメッセージ内の余分な引数が最も頻繁に与えられている経験から

// var choiceModel: ChoiceModel? { 
// didSet { 
//   layoutCell() 
// } 
// } 

答えて

2

ありがとう:私は、私が観察したものに関しては間違いを犯したことがわかり助けhttps://stackoverflow.com/a/36536320/2126233

。それは私が自分のコードで抱えていた問題を見る助けになりました。

あなただけの通常のtableViewCellにバインドしたいなら、あなたはtableView.rx_itemsWithCellFactoryを使用する必要があります。

currentQuestion.asObservable() 
     .bindTo(tableView.rx_itemsWithCellFactory) {(tableView, row, item) in 
      let cell = UITableViewCell() 
      cell.textLabel?.text = item.distance 

      return cell 

     }.addDisposableTo(disposeBag) 

カスタムセルを使用している場合、あなたはtableView.rx_itemsWithCellIdentifier("ChoiceCell", cellType: ChoiceCell.self)を使用することができます。ここでは一例である:私は私がのtableViewを結合して、アレイから出てきた要素にマッチしたのtableView細胞内のプロパティを持っていない限り、

currentQuestion 
    .asObservable() 
    .filter { $0 != nil } 
    .map { $0!.choices } 
    .bindTo(tableView.rx_itemsWithCellIdentifier("ChoiceCell", cellType: ChoiceCell.self)) { (row, element, cell) in 
    cell.choiceModel = element 
} 
.addDisposableTo(disposeBag) 

は、私にとっては、私はまだこれと同じエラーを取得しました。

もしあなたが[Taxis]の配列を持っていたら、tableViewCellの中に私はTaxisを格納した変数が必要でした。それで私はプロジェクトをコンパイルすることができました。

のでChoiceCellに私はそうのようなVAR持っている:私は、これは他の誰アレイにtableViewCellを結合の問題を持つことができます願ってい

var taxi: Taxi? { 
    didSet { 
     layoutCell() 
    } 

}

を。

+0

OK可能であれば回答を正しいものとしてマークしてください。 –

+0

表示されているエラーに対する修正であるため、自分の回答を正しいとマークしました。あなたの答えは、私がそれを投票したので、私が買うことができるポジションに入るのに大きな助けとなりました。私はそれが理にかなって、そしてもう一度感謝します:-)。 – pls

4

:私はChoiceCellから削除した場合、私は同じエラーを複製することができます。最初の問題は、タクシーの1つのインスタンスを、一連のオブザーバブルを待っているテーブルビューにバインドしようとしていることです。

/** 
Binds sequences of elements to table view rows. 

- parameter cellIdentifier: Identifier used to dequeue cells. 
- parameter source: Observable sequence of items. 
- parameter configureCell: Transform between sequence elements and view cells. 
- parameter cellType: Type of table view cell. 
- returns: Disposable object that can be used to unbind. 
*/ 
public func rx_itemsWithCellIdentifier<S : SequenceType, Cell : UITableViewCell, O : ObservableType where O.E == S>(cellIdentifier: String, cellType: Cell.Type = default) -> (source: O) -> (configureCell: (Int, S.Generator.Element, Cell) -> Void) -> Disposable 

問題は、オプションのオブジェクトによって引き起こされているようにそれはいないようですが、あなたがテーブルビューに、オプションのオブジェクトをバインドする理由私は見ていないので、私はあまりにもそれを避けるために、あなたをアドバイスします。以下は、動作する例です。フィリップ・レインは、上記の答えに

let currentQuestion = Variable<[Taxi]>([Taxi()]) 
currentQuestion.asObservable().bindTo(tableView.rx_itemsWithCellIdentifier("ChoiceCell")) {(row, element, cell) in 
    cell.choiceModel = element 
}.addDisposableTo(disposeBag) 
+0

お返事ありがとうございます。私は他のコードでそれがより意味をなさない配列であることを認識しました:-)。私はあなたの提案に自分のコードを更新しましたが、私はまだ同じ問題を抱えています。私は詳細を与えるために私の質問を編集しました。 – pls

0

これは遅い回答ですが、ここに問題があります。これが他の人がそれを理解するのを助けることができれば。

  • あなたはTaxi要素
  • rx_itemsWithCellIdentifier()が呼び出され
  • の配列は、element

(もちろん、それは配列の要素がある)しかし、あなたのコードの中であなたがTaxiであります。

cell.choiceModel = element 
// Where 
var choiceModel: ChoiceModel? { 
    didSet { 
     layoutCell() 
    } 
} 

だから、あなたはChoiceModelTaxiを割り当てようとしています。このため、このエラーが発生しています。スウィフト型推論は、型が不一致であると判断します。ブロック内の行にコメントを付けると、エラーが消えるはずです。

関連する問題