我正在尝试使用 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)) ])
]
我现在想修改示例,并且只想在第二部分显示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 或关联的类型要求