[swift-evolution] Proposal: Add StaticString.UnicodeScalarView
Kevin Ballard
kevin at sb.org
Sun Dec 6 03:23:56 CST 2015
I've submitted a proposal for this as
https://github.com/apple/swift-evolution/pull/32
I also have an implementation written as
https://github.com/apple/swift/pull/277
-Kevin Ballard
On Sun, Dec 6, 2015, at 01:21 AM, Kevin Ballard wrote:
> There's no way to create a substring of `StaticString` that's still
> typed as `StaticString`. This is occasionally desirable, for example
> if you want to extract the filename from `__FILE__` to pass to another
> API that requires a `StaticString`.
>
> I believe the best solution to this is to add a type
> `StaticString.UnicodeScalarView`, similar to
> `String.UnicodeScalarView`. `StaticString` would also be extended with
> a property `unicodeScalars` and two initializers to construct a
> `StaticString` from a `String.UnicodeScalarView`. The full proposed
> API looks like:
>
> extension StaticString { /// The value of `self` as a collection of
> [Unicode scalar values]
> (http://www.unicode.org/glossary/#unicode_scalar_value). public var
> unicodeScalars: UnicodeScalarView
>
> /// Construct the `StaticString` corresponding to the given ///
> `UnicodeScalarView`. public init(_: UnicodeScalarView)
>
> /// Construct the `StaticString` corresponding to the given ///
> `UnicodeScalarView` slice. public init(_: Slice<UnicodeScalarView>)
>
> /// A collection of [Unicode scalar values]
> (http://www.unicode.org/glossary/#unicode_scalar_value) that ///
> encode a `StaticString`. public struct UnicodeScalarView :
> CollectionType {
>
> init(_: StaticString)
>
> /// A position in a `StaticString.UnicodeScalarView`. public struct
> Index : BidirectionalIndexType, Comparable { /// Returns the next
> consecutive value after `self`. /// /// - Requires: The next
> value is representable. @warn_unused_result public func
> successor() -> Index
>
> /// Returns the previous consecutive value before `self`. ///
> /// - Requires: The previous value is representable.
> @warn_unused_result public func predecessor() -> Index }
>
> /// The position of the first `UnicodeScalar` if the `StaticString` is
> /// non-empty; identical to `endIndex` otherwise. public var
> startIndex: Index
>
> /// The "past the end" position. /// /// `endIndex` is not a
> valid argument to `subscript`, and is always /// reachable from
> `startIndex` by zero or more applications of /// `successor()`.
> public var endIndex: Index
>
> /// Returns `true` iff `self` is empty. public var isEmpty: Bool
>
> public subscript(position: Index) -> UnicodeScalar } }
>
> An alternative would be to make StaticString itself conform to
> CollectionType, but this is a bad idea for the same reasons that
> String doesn't conform to CollectionType.
>
> -Kevin Ballard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151206/103dd1b8/attachment.html>
More information about the swift-evolution
mailing list