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
要素が含まれているため、これは明らかにコンパイルされません. セクションを次のように宣言することでこれを回避しようとしましたが、これは機能しません。コンパイラーは次のように不平を言います。SectionOfCustomData
SectionOfString
[SectionModelType]
プロトコル ' SectionModelType
' は、Self または関連する型の要件があるため、一般的な制約としてのみ使用できます