9

RxSwift を使用して、複数のセクションを持つテーブル ビューを作成しようとしています。各セクションには、異なるタイプを表すデータが表示されます。

ライブラリを見つけてRxSwiftDataSources、ドキュメントから例を実装しました。

以下は、その例がどのように実装されているかを簡単にまとめたものです。

カスタム データ型CustomDataが定義されています。

struct CustomData {
  var anInt: Int
  var aString: String
  var aCGPoint: CGPoint
}

次に、セクションの表現が追加されます (SectionModelTypeここで実装されていることに注意してください)。

struct SectionOfCustomData {
  var header: String    
  var items: [Item]
}
extension SectionOfCustomData: SectionModelType {
  typealias Item = CustomData

   init(original: SectionOfCustomData, items: [Item]) {
    self = original
    self.items = items
  } 
}

最後に、いくつかのサンプル データが作成され、テーブル ビューにバインドされます。

let sections: [SectionOfCustomData] = [
  SectionOfCustomData(header: "First section", items: [CustomData(anInt: 0, aString: "zero", aCGPoint: CGPoint.zero), CustomData(anInt: 1, aString: "one", aCGPoint: CGPoint(x: 1, y: 1)) ]),
  SectionOfCustomData(header: "Second section", items: [CustomData(anInt: 2, aString: "two", aCGPoint: CGPoint(x: 2, y: 2)), CustomData(anInt: 3, aString: "three", aCGPoint: CGPoint(x: 3, y: 3)) ])
]

例を変更して、2 番目のセクションに のStringインスタンスではなく sのみを表示したいので、次のようにします。CustomData

let sections = [
  SectionOfCustomData(header: "First section", items: [CustomData(anInt: 0, aString: "zero", aCGPoint: CGPoint.zero), CustomData(anInt: 1, aString: "one", aCGPoint: CGPoint(x: 1, y: 1)) ]),
  SectionOfString(header: "Second section", items: ["a", "b", "c"])
]

さまざまなタイプのsections要素が含まれているため、これは明らかにコンパイルされません. セクションを次のように宣言することでこれを回避しようとしましたが、これは機能しません。コンパイラーは次のように不平を言います。SectionOfCustomDataSectionOfString[SectionModelType]

プロトコル ' SectionModelType' は、Self または関連する型の要件があるため、一般的な制約としてのみ使用できます

4

1 に答える 1