[swift-users] Why does RangeReplaceableCollection require an empty initialiser?

Dave Abrahams dabrahams at apple.com
Wed Jul 6 21:05:24 CDT 2016

on Wed Jul 06 2016, Tim Vermeulen <swift-users-AT-swift.org> wrote:

> RangeReplaceableCollection has three initialisers: init(), init(_:)
> and init(repeating:count:). The latter two are implemented using the
> empty initialiser. But why are these initialisers part of this
> particular protocol? As far as I can tell, no other methods of this
> protocol depend on these initialisers. The requirement of the empty
> initialiser makes it impossible to have a collection conform to this
> protocol that needs additional data for its initialisation.

This is an excellent point, and I think it may have been an oversight
that we made this a requirement.  Please open a bug and/or file a radar.


> For instance, I was making an array that works with any Strideable
> indices, not just integers. A startIndex is needed for its
> initialisation, so I can’t really conform it to
> RangeReplaceableCollection. If I do it anyways (with a fatalError() in
> the required empty initialiser) everything seems to work just fine,
> except for the protocol’s three initialisers.
> Perhaps these initialisers should be moved to a (possible new)
> different protocol?


More information about the swift-users mailing list