SkillAgentSearch skills...

Doppelganger

Array diffs as collection view wants it

Install / Use

/learn @Wondermall/Doppelganger
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Doppelganger

Build Status Version License Platform

TL;DR;

<table> <tr> <td> <img src="https://raw.githubusercontent.com/Wondermall/Doppelganger/master/Screenshot_bad.gif" alt="bad ux" style="max-width:100%;" width="186px"> </td> <td> <img src="https://raw.githubusercontent.com/Wondermall/Doppelganger/master/Screenshot.gif" alt="good ux" style="max-width:100%;" width="186px"> </td> </tr> <tr> <td> Bad UX </td> <td> Good UX<sup>1</sup> </td> </tr> </table>

<sup>1</sup>: Slowed down intentionally to demonstrate the awesomeness

Problems it solves

  • Calculating mutations is too hard and you're just calling reloadData on your collection or table view?
  • Users, confused where did that row disappear?
  • Rows, jumping out of nowhere?
  • Lost scroll position?

Doppelganger is here to help!

Usage

NSArray *oldDataSource = self.dataSource;
self.dataSource = [self _updatedDataSource];
NSArray *diffs = [WMLArrayDiffUtility diffForCurrentArray:self.dataSource
                                            previousArray:oldDataSource];
[self.tableView wml_applyBatchChangesForRows:diffs
                                   inSection:0
                            withRowAnimation:UITableViewRowAnimationRight];

Implementation details

  • Currently, doppelganger supports only array of unique elements, e.g. if you have duplicated elements in your array, result is unpredictable.
  • If you are using custom classes, make sure that it implements correctly isEqual: and hash methods: http://nshipster.com/equality/

TODOs

  • Improve on O(n<sup>2</sup>) when calculating moved elements.
  • Abstract API from NSArray.
  • Your issue / pull request.

Installation

Doppelganger is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "Doppelganger"

Author

Sash Zats, sash@zats.io

License

Doppelganger is available under the MIT license. See the LICENSE file for more info.

View on GitHub
GitHub Stars640
CategoryDevelopment
Updated18d ago
Forks28

Languages

Objective-C

Security Score

95/100

Audited on Mar 15, 2026

No findings