RxSwiftを使用して複数のセクションでテーブルビューを作成しようとしています。各セクションには、異なるタイプを表すデータが表示されます。RxSwiftとRxSwiftDataSourcesを使用して異なるデータタイプを表す複数のセクションでテーブルビューをバインドするにはどうすればよいですか?
私はRxSwiftDataSources
ライブラリを見つけ、そのドキュメントからその例を実装しました。ここ
その例が実装されている方法の迅速runthroughある:カスタムデータ型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)) ])
]
は、私は今の例を変更したいとだけ第二項にCustomData
のString
のではなく、インスタンスを表示したいので、多少のように:
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
としてコンパイルされませんさまざまな種類の要素が含まれていますSectionOfCustomData
とSectionOfString
。コンパイラはと文句を言う、私は[SectionModelType]
としてセクションを宣言しようとすることでこの問題を回避しようとしたが、これは動作しません:
それは自己または関連タイプの要件を持っているので、議定書SectionModelType
'の唯一の一般的な制約として使用することができます
あなたは既に解決策を持っていましたか? –