> On Mar 7, 2017, at 9:28 AM, Michael Gardner via swift-users 
> <swift-users@swift.org> wrote:
> 
> The general approach would be to run a diff between your old and new arrays. 
> Something like https://github.com/jflinter/Dwifft 
> <https://github.com/jflinter/Dwifft> could help, though I haven't used it 
> personally.

I’ve implemented something like this in the past. It’s fairly expensive, 
though; that library does claim to use an optimized algorithm, but the cost is 
still a lot higher than just posting a notification. (And my own experience of 
using KVO is that notifications can become significant hot spots in 
performance, because they happen a lot.)

On the other hand, if the array is expected to change often, more often than 
you want to redraw the GUI, it could make sense to ignore the fine-grained 
changes and just set a timer to trigger after a few hundred ms, which would 
then compare the old and new arrays this way and apply a minimal update to the 
view.

> Another approach is to build a wrapper around your source array with limited 
> modification methods and a KVO-like notification system. The notifications 
> can map cleanly to UITableView updates, and there's no extra diffing 
> calculations involved. Of course, this method won't work if your source array 
> needs to be modified by code you don't control.

I would favor this, even though Swift’s strict typing [and lack of inheritance 
in struct types] means this class can’t interoperate with regular arrays. (Vs. 
Objective-C, where you can either subclass NSMutableArray, or even make an 
unrelated class that walks & quacks like an NSArray.)

This seems likely to have been created by someone already; I wonder if there’s 
an implementation floating around Github?

—Jens
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to