<div dir="ltr">N<div class="gmail_default" style="font-family:georgia,serif;display:inline">o. You didn't catch what I meant. I meant it should be like an equation. If foo is a </div><span style="font-family:georgia,serif"></span><font face="georgia, serif">RangeReplaceableCollection,<div class="gmail_default" style="font-family:georgia,serif;display:inline"> </div></font><span style="font-family:georgia,serif">foo</span><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;display:inline"> minus </div></font><span style="font-family:georgia,serif">foo</span><font face="georgia, serif"><div class="gmail_default" style="display:inline"> equates zero, zero means an empty collection. Both side of the equation should be with the same unit, the unit is </div></font><span style="font-family:georgia,serif">RangeReplaceableCollection.<div class="gmail_default" style="font-family:georgia,serif;display:inline"> Below code also shows init() is useful in </div></span><font face="georgia, serif">RangeReplaceableCollection.<div class="gmail_default" style="font-family:georgia,serif;display:inline"></div></font><div><span style="font-family:georgia,serif"><div class="gmail_default" style="font-family:georgia,serif;display:inline"><br></div></span></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="color:rgb(187,44,162)">var</span><span style=""> foo = </span><span style="color:rgb(112,61,170)">Array</span><span style=""><</span><span style="color:rgb(112,61,170)">Int</span><span style="">>()</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">
</p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="color:rgb(79,129,135)">foo</span><span style="">.</span><span style="color:rgb(61,29,129)">append</span><span style="">(contentsOf: [</span><span style="color:rgb(39,42,216)">2</span><span style="">,</span><span style="color:rgb(39,42,216)">4</span><span style="">,</span><span style="color:rgb(39,42,216)">6</span><span style="">,</span><span style="color:rgb(39,42,216)">8</span><span style="">])</span></p></blockquote></blockquote>
<div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;display:inline"><br></div></font></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;display:inline">Zhaoxin</div></font></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 6, 2016 at 10:07 PM, Tim Vermeulen <span dir="ltr"><<a href="mailto:tvermeulen@me.com" target="_blank">tvermeulen@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You wouldn’t need an empty initialiser to remove all elements from a collection, right? You could just use `replaceRange` instead.<br>
<br>
> 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.<br>
><br>
> > init()<br>
> (file:///Users/zhaoxin/Library/Application%20Support/Dash/DocSets/Apple_API_Reference/Apple_API_Reference.docset/Contents/Resources/Documents/<a href="http://developer.apple.com/reference/swift/rangereplaceablecollection/1641467-init.html" rel="noreferrer" target="_blank">developer.apple.com/reference/swift/rangereplaceablecollection/1641467-init.html</a>)> Creates a new, empty collection.<br>
><br>
> Zhaoxin<br>
<span class="">><br>
> On Wed, Jul 6, 2016 at 9:09 PM, Tim Vermeulen<<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>(mailto:<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>)>wrote:<br>
> > 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`.<br>
> ><br>
> > Either way, it’s not really important. I’m mostly wondering why RangeReplaceableCollection needs an empty initialiser.<br>
> ><br>
> > >Then how you defined the index to conform toStrideable? Below code does work as it seams that you can't use generics in subscripts.<br>
> > ><br>
> > ><br>
> > >subscript<T:Strideable>(index:T) ->Element<br>
> > ><br>
> > ><br>
> > ><br>
> > ><br>
> > ><br>
> > ><br>
> > >Zhaoxin<br>
> > ><br>
> > ><br>
> > ><br>
> > ><br>
</span>> > >On Wed, Jul 6, 2016 at 8:32 PM, Tim Vermeulen<<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>(mailto:<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>)(mailto:<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>)>wrote:<br>
<span class="">> > >><br>
> > >>>On 6 Jul 2016, at 14:03, Zhao Xin<<a href="mailto:owenzx@gmail.com">owenzx@gmail.com</a>(mailto:<a href="mailto:owenzx@gmail.com">owenzx@gmail.com</a>)(mailto:<a href="mailto:owenzx@gmail.com">owenzx@gmail.com</a>)>wrote:<br>
> > >>>According to the document of Swift 3, Array has already conformed protocolRangeReplaceableCollection.<br>
> > >><br>
> > >>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.<br>
> > >><br>
> > >>><br>
> > >>>Zhaoxin<br>
> > >>><br>
</span><span class="">> > >>>On Wed, Jul 6, 2016 at 7:09 PM, Tim Vermeulen via swift-users<<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>(mailto:<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>)(mailto:<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>)>wrote:<br>
> > >>>>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.<br>
> > >>>><br>
> > >>>>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.<br>
> > >>>><br>
> > >>>>Perhaps these initialisers should be moved to a (possible new) different protocol?<br>
> > >>>>_______________________________________________<br>
> > >>>>swift-users mailing list<br>
</span>> > >>>><a href="mailto:swift-users@swift.org">swift-users@swift.org</a>(mailto:<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>)(mailto:<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>)<br>
> > >>>><a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
> > >>><br>
> > >><br>
> > ><br>
> > ><br>
> > ><br>
><br>
><br>
> </blockquote></div><br></div>