[swift-users] function advancedBy() bugs

zh ao owenzx at gmail.com
Tue May 17 07:46:12 CDT 2016


It seams that I encountered bugs in function advancedBy().

//: Playground - noun: a place where people can play


import Foundation


do {

    var str = "abcdefg"

    var range = str.startIndex..<str.endIndex // 0..<7

    str += "hijklmn"

    range.endIndex = str.endIndex // 0..<14

    let index = range.startIndex.advancedBy(10)

    //fatal error: cannot increment endIndex

}


do {

    var str = "abcdefg"

    str += "hijklmn"



    var range = str.startIndex..<str.endIndex // 0..<14

    let index = range.startIndex.advancedBy(10)

    range // 0..<14

}


do {

    var range = 0..<7

    let index = range.startIndex.advancedBy(10)

    range // 0..<7

}


There are three do blocks. All codes are similar.


First block and second block is the almost same. But I encounter an error
in the first block, saying "fatal error: cannot increment endIndex". It
shouldn't appear as the endIndex of range is 14 instead 7.


Second block and third block both used function advancedBy, however, in the
second block, the method is from BidirectionalIndexType,


extension BidirectionalIndexType {

    @warn_unused_result

    public func advancedBy(n: Self.Distance) -> Self

    @warn_unused_result

    public func advancedBy(n: Self.Distance, limit: Self) -> Self

}


​in the ​third block, it is RandomAccessIndexType,


extension Int : RandomAccessIndexType {

    /// Returns the next consecutive value after `self`.

    ///

    /// - Requires: The next value is representable.

    public func successor() -> Int

    /// Returns the previous consecutive value before `self`.

    ///

    /// - Requires: The previous value is representable.

    public func predecessor() -> Int

    public func distanceTo(other: Int) -> Distance

    public func advancedBy(n: Distance) -> Int

}


​So the range in the third block after advancedBy is unchanged. It makes
sense here. But I think people may feel strange as one is a mutating
function and the other is not.

​Zh​aoxin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160517/8a580460/attachment.html>


More information about the swift-users mailing list