On Mon, May 2, 2016 at 3:08 PM, Karl via swift-evolution <swift-evolution@swift.org> wrote: > So, just confirming that the following is going to change: > > ————— > var string = "test" > let origLen = 4 > let indexOne = string.startIndex > > string.appendContentsOf("ANOTHERTEST") > > let indexTwo = indexOne.advancedBy(origLen, limit: string.endIndex) > > assert(indexTwo<string.endIndex) > indexTwo.successor() //<--- fatal error: cannot > increment endIndex > —————
Hi Karl, Yes, this code would start working. > Is this a consequence of the index needing to know its originating string for > successor() purposes? That would be a plausible explanation, but I think that would be too simple to be true :) This code should even work in the current model, but the current (buggy) behavior is caused by String indices keeping an extra strong reference to the underlying storage, so the mutation actually detaches the index from the updated string storage. > Once this is implemented, will String.Index be portable across string > instances (presuming you bounds-check them, as I did above)? Yes, within the prefix that was common to all strings and was created in a common mutation history. Dmitri -- main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if (j){printf("%d\n",i);}}} /*Dmitri Gribenko <griboz...@gmail.com>*/ _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution