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

Tim Vermeulen tvermeulen at me.com
Wed Jul 6 06:09:13 CDT 2016

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.

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