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

Zhao Xin owenzx at gmail.com
Wed Jul 6 08:49:35 CDT 2016


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 the
RangeReplaceableCollection
to be a non-RangeReplaceableCollection. So the empty collection must also
be a RangeReplaceableCollection.

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> 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)>wrote:
> > >
> > > > On 6 Jul 2016, at 14:03, Zhao Xin<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)>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)
> > > > > https://lists.swift.org/mailman/listinfo/swift-users
> > > >
> > >
> >
> >
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160706/3d2abdb7/attachment.html>


More information about the swift-users mailing list