on Thu Jul 21 2016, Roman Levenstein <[email protected]> wrote:

> Hi,
>
> I’d like to propose some improvements for String initializers and
> String.append methods. It is addressing
> https://bugs.swift.org/browse/SR-1964
> <https://bugs.swift.org/browse/SR-1964> (rdar://problem/17028332
> <rdar://problem/17028332>).

+1; let's do it!

>
> # Replace String.init(repeating repeatedValue: Character, count: Int) and 
> String.init(repeating repeatedValue: UnicodeScalar, count: Int) by 
> String.init(repeating repeatedValue: String, count: Int)
>
> * Proposal:
> * Author: [Roman Levenstein](http://github.com/swiftix)
> * Status: 
> * Review manager:
>
> Introduction
> =========
>
> This proposal suggest replacing String initializers taking Character or 
> UnicodeScalar as a repeating value by a more general initializer that takes a 
> String as a repeating value. This is done to avoid the ambiguities in the 
> current String API, which can be only resolved by explicit casting. It is 
> also proposed to remove one of the String.append APIs to match these changes.
>
> All user-facing Swift APIs must go through Swift Evolution. While this is a 
> relatively simple API change with an existing implementation, this formal 
> proposal provides a paper trail as is normal and usual for this process.
>
> Motivation
> ========
>
> This change introduces a non-ambiguous API for constructing Strings. With the 
> set of String initializers available today, ones often needs to explicitly 
> cast the repeating value literal to disambiguate what initializer is meant to 
> be used. 
>
> An example of the ambiguity:
>
>> let x = String(repeating:"0", count: 10) 
> error: repl.swift:29:9: error: ambiguous use of 'init(repeating:count:)'
> let x = String(repeating:"0", count: 10)
>         ^
>
> Swift.String:11:12: note: found this candidate
>     public init(repeating repeatedValue: Character, count: Int)
>            ^
>
> Swift.String:21:12: note: found this candidate
>     public init(repeating repeatedValue: UnicodeScalar, count: Int)
>            ^
>
> To disambiguate, one currently needs to write something like:
> `let zeroes = String(repeating: "0" as Character, count: 10)` or 
> `let zeroes = String(repeating: "0" as UnicodeScalar, count: 10)`
>
> Detailed Design
> ============
>
> This update affects `String`.
>
> It is proposed to replace the following ambiguous API:
> *  `public init(repeating repeatedValue: Character, count: Int)`
> *  `public init(repeating repeatedValue: UnicodeScalar, count: Int)`
>
> by the following, more powerful API:
> *  `public init(repeating repeatedValue: String, count: Int)`
>
> To match this change, it is also proposed to remove the following 
> String.append API:
> *  `public mutating func append(_ x: UnicodeScalar)`
> because there is already an existing and more powerful API:
> *  `public mutating func append(_ other: String)`
>
> Impact on Existing Code
> ===================
>
> Existing third party code using these to be removed String APIs will need 
> migration.
> A fixit could be provided to automate this migration.
>
> Alternatives Considered
> ==================
>
> Not Applicable
>
> -Roman
>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
>

-- 
Dave

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to