[swift-evolution] Pitch: String Index Overhaul
Ben Rimmington
me at benrimmington.com
Sat Jun 3 18:32:14 CDT 2017
> On 27 May 2017, at 18:40, Dave Abrahams wrote:
>
> ## Introduction
>
> Today `String` shares an `Index` type with its `CharacterView` but not
> with its `UTF8View`, `UTF16View`, or `UnicodeScalarView`. This
> proposal redefines `String.UTF8View.Index`, `String.UTF16View.Index`,
> and `String.CharacterView.Index` as typealiases for `String.Index`,
> and exposes a public `encodedOffset` property and initializer that can
> be used to serialize and deserialize positions in a `String` or
> `Substring`.
If `encodedOffset` is only needed for serialization of indices,
could `String.Index` conform to `Codable` from SE-0166 instead?
> ## Proposed solution
>
> All `String` views will use a single index type (`String.Index`), so
> that positions can be interchanged without awkward explicit
> conversions:
>
> ```swift
> let html: String = "See <a href=\"http://swift.org\">swift.org</a>"
>
> // Search the UTF16, instead of characters, for performance reasons:
> let open = "<".utf16.first!, close = ">".utf16.first!
> let tagStart = s.utf16.index(of: open)
> let tagEnd = s.utf16[tagStart...].index(of: close)
I think `s` should be `html` in the previous two lines.
-- Ben
More information about the swift-evolution
mailing list