https://github.com/raywenderlich/dsk-materials
An iterable type provides sequential access to its elements via an Iterator.
A collection is an iterable that provides additional functionality, allowing you to check if the collection contains a particular element or a collection of elements.
An iterable that provides a MutableIterator, which allows both accessing the items and removing them.
A collection that also provides methods to alter its contained items. For example, you can add and remove elements, and even clear the entire collection.