[swift-users] Why does RangeReplaceableCollection require an empty initialiser?
Tim Vermeulen
tvermeulen at me.com
Wed Jul 6 11:10:01 CDT 2016
I never said a RangeReplaceableCollection shouldn’t be empty. I just think it’s strange that it requires an empty initialiser (while the Collection protocol doesn’t).
> On 6 Jul 2016, at 16:33, Zhao Xin <owenzx at gmail.com> wrote:
>
> No. You didn't catch what I meant. I meant it should be like an equation. If foo is a RangeReplaceableCollection, foo minus foo equates zero, zero means an empty collection. Both side of the equation should be with the same unit, the unit is RangeReplaceableCollection. Below code also shows init() is useful in RangeReplaceableCollection.
>
> var foo = Array<Int>()
> foo.append(contentsOf: [2,4,6,8])
>
> Zhaoxin
>
> On Wed, Jul 6, 2016 at 10:07 PM, Tim Vermeulen <tvermeulen at me.com <mailto:tvermeulen at me.com>> wrote:
> 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 <http://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>(mailto: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 <mailto: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 <mailto: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 <mailto: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 <mailto: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 <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/be230fb9/attachment.html>
More information about the swift-users
mailing list