[swift-evolution] Strings in Swift 4

Ole Begemann ole at oleb.net
Fri Jan 20 08:02:40 CST 2017

>> extension Unicode {
>>  // An example of the option language in declaration context,
>>  // with nil defaults indicating unspecified, so defaults can be
>>  // driven by the presence/absence of a specific Locale
>>  func frobnicated(
>>    case caseSensitivity: StringSensitivity? = nil,
>>    diacritic diacriticSensitivity: StringSensitivity? = nil,
>>    width widthSensitivity: StringSensitivity? = nil,
>>    in locale: Locale? = nil
>>  ) -> Self { ... }
>> }
>> ```
> Any reason why Locale is defaulted to nil, instead of currentLocale? It
> seems more useful to me.

The reason is given in the text above the code sample: "The defaults for 
case-, diacritic-, and width-insensitivity are different for localized 
operations than for non-localized operations, so for example a localized 
sort should be case-insensitive by default, and a non-localized sort 
should be case-sensitive by default."

So the API would need to distinguish between "current locale" and "no 
locale" (i.e. use the non-localized algorithm).

> Will String also conform to SequenceType? I’ve seen many users (coming
> from other languages) confused that they can’t “just” loop over a
> String’s characters.

Collection refines Sequence, so all collections are sequences. This 
would also be true for String. So yes, you could do `for char in string` 

More information about the swift-evolution mailing list