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

Tim Vermeulen tvermeulen at me.com
Wed Jul 6 09:07:37 CDT 2016


You wouldn’t need an empty initialiser to remove all elements from a collection, right? You could just use `replaceRange` instead.

> Now I understood you concerns. Have you ever thought of if a non-empty RangeReplaceableCollection being removed all of its elements, which makes the collection to be an empty collection. That shouldn't change theRangeReplaceableCollection to be a non-RangeReplaceableCollection. Sothe empty collection must also be aRangeReplaceableCollection.
> 
> > init()
> (file:///Users/zhaoxin/Library/Application%20Support/Dash/DocSets/Apple_API_Reference/Apple_API_Reference.docset/Contents/Resources/Documents/developer.apple.com/reference/swift/rangereplaceablecollection/1641467-init.html)> Creates a new, empty collection.
> 
> Zhaoxin
> 
> On Wed, Jul 6, 2016 at 9:09 PM, Tim Vermeulen<tvermeulen at me.com(mailto:tvermeulen at me.com)>wrote:
> > I’m not allowing generic subscripts. The collection is declared as `AnyIndexArray<Index: Strideable, Element where Index.Stride == Int>` and it can be subscripted with type `Index`.
> > 
> > Either way, it’s not really important. I’m mostly wondering why RangeReplaceableCollection needs an empty initialiser.
> > 
> > >Then how you defined the index to conform toStrideable? Below code does work as it seams that you can't use generics in subscripts.
> > >
> > >
> > >subscript<T:Strideable>(index:T) ->Element
> > >
> > >
> > >
> > >
> > >
> > >
> > >Zhaoxin
> > >
> > >
> > >
> > >
> > >On Wed, Jul 6, 2016 at 8:32 PM, Tim Vermeulen<tvermeulen at me.com(mailto:tvermeulen at me.com)(mailto:tvermeulen at me.com)>wrote:
> > >>
> > >>>On 6 Jul 2016, at 14:03, Zhao Xin<owenzx at gmail.com(mailto:owenzx at gmail.com)(mailto:owenzx at gmail.com)>wrote:
> > >>>According to the document of Swift 3, Array has already conformed protocolRangeReplaceableCollection.
> > >>
> > >>That’s exactly why I also want to conform my wrapper to that protocol? I think there’s a misunderstanding. I’m making a collection that can be subscripted with any index (that conforms to Strideable), but behaves like an array otherwise.
> > >>
> > >>>
> > >>>Zhaoxin
> > >>>
> > >>>On Wed, Jul 6, 2016 at 7:09 PM, Tim Vermeulen via swift-users<swift-users at swift.org(mailto:swift-users at swift.org)(mailto: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.
> > >>>>
> > >>>>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?
> > >>>>_______________________________________________
> > >>>>swift-users mailing list
> > >>>>swift-users at swift.org(mailto:swift-users at swift.org)(mailto:swift-users at swift.org)
> > >>>>https://lists.swift.org/mailman/listinfo/swift-users
> > >>>
> > >>
> > >
> > >
> > >
> 
> 
> 


More information about the swift-users mailing list