Swift 来自单个数组的 Collectionview 部分
Swift Collectionview Sections from a single array
我有一个数组 IDs
["one", "two", "three"...]
这些 Ids
与我从 URLSession
得到的 json
匹配,然后显示在 collectionview
中。
目前它只是一个简单的 collectionView
,具有通过长按和拖动重新排序的功能。
但我需要将它分成几个部分的可能性。
最好的办法是使节动态化,这样我就可以添加任意数量的节,然后将单元格分类到节中。
如果每个部分都有一个数组,比如
,我就能做到
section1 = ["one", "two"]
section2 = ["three", "four"]
但我不知道如何在我当前的设置中实现这一点。
不要这样做。我相信您可以想出一种方法来保留单个数组,但不要这样做。维护噩梦会缠着你。
创建分解为数组数组的数据视图。
struct MySection {
let sectionId: String // or whatever section metadata you need.
let data: [Data] // or whatever your real type is.
}
在集合视图控制器中
var dataView: [MySection]
1个部分的所有数据
self.dataView = [MySection(sectionId: "all data", data: self.data)]
将数据分组到不同的部分
self.dataView = self.data.reduce([]) { dataView, datum in
var dataView = dataView // make a mutable data view
let sectionId = self.determineSectionIdFromDatum(datum) // <-- slotting into sections
// Add into an existing section or into a new section
if let index = dataView.index(where: { [=13=].sectionId == sectionId }) {
let data = dataView[index].data + [datum]
dataView[index] = MySection(sectionId: sectionId, data: data)
} else {
let data = [datum]
dataView.append(MySection(sectionId: sectionId, data: data))
}
return dataView
}
此时您可能需要对部分或部分中的数据进行排序。
我有一个数组 IDs
["one", "two", "three"...]
这些 Ids
与我从 URLSession
得到的 json
匹配,然后显示在 collectionview
中。
目前它只是一个简单的 collectionView
,具有通过长按和拖动重新排序的功能。
但我需要将它分成几个部分的可能性。
最好的办法是使节动态化,这样我就可以添加任意数量的节,然后将单元格分类到节中。 如果每个部分都有一个数组,比如
,我就能做到section1 = ["one", "two"]
section2 = ["three", "four"]
但我不知道如何在我当前的设置中实现这一点。
不要这样做。我相信您可以想出一种方法来保留单个数组,但不要这样做。维护噩梦会缠着你。
创建分解为数组数组的数据视图。
struct MySection {
let sectionId: String // or whatever section metadata you need.
let data: [Data] // or whatever your real type is.
}
在集合视图控制器中
var dataView: [MySection]
1个部分的所有数据
self.dataView = [MySection(sectionId: "all data", data: self.data)]
将数据分组到不同的部分
self.dataView = self.data.reduce([]) { dataView, datum in
var dataView = dataView // make a mutable data view
let sectionId = self.determineSectionIdFromDatum(datum) // <-- slotting into sections
// Add into an existing section or into a new section
if let index = dataView.index(where: { [=13=].sectionId == sectionId }) {
let data = dataView[index].data + [datum]
dataView[index] = MySection(sectionId: sectionId, data: data)
} else {
let data = [datum]
dataView.append(MySection(sectionId: sectionId, data: data))
}
return dataView
}
此时您可能需要对部分或部分中的数据进行排序。