@@ -82,10 +82,10 @@ open class SPDiffableCollectionDataSource: UICollectionViewDiffableDataSource<SP
82
82
public func apply( _ sections: [ SPDiffableSection ] , animated: Bool ) {
83
83
if #available( iOS 14 , * ) {
84
84
85
- // Remove section if it deleted from content.
86
-
87
85
var snapshot = self . snapshot ( )
88
86
87
+ // Remove section if it deleted from content
88
+
89
89
let deletedSections = snapshot. sectionIdentifiers. filter ( { ( checkSection) -> Bool in
90
90
return !sections. contains ( where: { $0. identifier == checkSection. identifier } )
91
91
} )
@@ -94,22 +94,7 @@ open class SPDiffableCollectionDataSource: UICollectionViewDiffableDataSource<SP
94
94
apply ( snapshot, animated: true )
95
95
}
96
96
97
- // Reoder
98
-
99
- for (sectionIndex, section) in sections. enumerated ( ) {
100
- let previousSectionIndex = sectionIndex - 1
101
- guard ( sections. count > previousSectionIndex) && ( previousSectionIndex >= 0 ) else { continue }
102
- let previousSection = sections [ previousSectionIndex]
103
- guard let _ = snapshot. sectionIdentifiers. first ( where: { $0. identifier == section. identifier } ) else { continue }
104
- guard let _ = snapshot. sectionIdentifiers. first ( where: { $0. identifier == previousSection. identifier } ) else { continue }
105
- snapshot. moveSection ( section, afterSection: previousSection)
106
- }
107
-
108
- // Apply Sections Changes
109
-
110
- apply ( snapshot, animated: true )
111
-
112
- // Update current sections.
97
+ // Add new sections and update current sections
113
98
114
99
for section in sections {
115
100
var sectionSnapshot = SPDiffableSectionSnapshot ( )
@@ -127,6 +112,22 @@ open class SPDiffableCollectionDataSource: UICollectionViewDiffableDataSource<SP
127
112
sectionSnapshot. expand ( sectionSnapshot. items)
128
113
apply ( sectionSnapshot, to: section, animatingDifferences: animated)
129
114
}
115
+
116
+ // Reoder sections
117
+
118
+ for (sectionIndex, section) in sections. enumerated ( ) {
119
+ let previousSectionIndex = sectionIndex - 1
120
+ guard ( sections. count > previousSectionIndex) && ( previousSectionIndex >= 0 ) else { continue }
121
+ let previousSection = sections [ previousSectionIndex]
122
+ guard let _ = snapshot. sectionIdentifiers. first ( where: { $0. identifier == section. identifier } ) else { continue }
123
+ guard let _ = snapshot. sectionIdentifiers. first ( where: { $0. identifier == previousSection. identifier } ) else { continue }
124
+ snapshot. moveSection ( section, afterSection: previousSection)
125
+ }
126
+
127
+ // Apply changes
128
+
129
+ apply ( snapshot, animated: true )
130
+
130
131
} else {
131
132
var snapshot = SPDiffableSnapshot ( )
132
133
snapshot. appendSections ( sections)
0 commit comments