Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit 3f98c51

Browse files
committed
Improve performance in RealmAssorter
1 parent 02e5d7f commit 3f98c51

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

Rocket.Chat/Helpers/RealmAssorter.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,18 @@ class RealmAssorter<Object: RealmSwift.Object & UnmanagedConvertible> {
2121
var objects: Results<Object>
2222

2323
var section: ArraySection<String, Object.UnmanagedType> {
24-
return ArraySection(model: name, elements: objects.compactMap { $0.unmanaged })
24+
25+
var elements = [Object.UnmanagedType]()
26+
elements.reserveCapacity(objects.count)
27+
for object in objects {
28+
guard let unmanaged = object.unmanaged else {
29+
continue
30+
}
31+
32+
elements.append(unmanaged)
33+
}
34+
35+
return ArraySection(model: name, elements: elements)
2536
}
2637
}
2738

@@ -62,7 +73,11 @@ class RealmAssorter<Object: RealmSwift.Object & UnmanagedConvertible> {
6273
self.model?.invalidate()
6374
self.model = model.observe { _ in
6475
let oldValue = self.sections
65-
let newValue = self.results.map { $0.section }
76+
var newValue = [ArraySection<String, Object.UnmanagedType>]()
77+
newValue.reserveCapacity(self.results.count)
78+
for result in self.results {
79+
newValue.append(result.section)
80+
}
6681

6782
let changes = StagedChangeset(source: oldValue, target: newValue)
6883

0 commit comments

Comments
 (0)