UTF16View

    A view of a string’s contents as a collection of UTF-16 code units.

    @frozen struct UTF16View

    You can access a string’s view of UTF-16 code units by using its utf16 property. A string’s UTF-16 view encodes the string’s Unicode scalar values as 16-bit integers.

    let flowers = "Flowers 💐"
    for v in flowers.utf16 {
        print(v)
    }
    // 70
    // 108
    // 111
    // 119
    // 101
    // 114
    // 115
    // 32
    // 55357
    // 56464

    Unicode scalar values that make up a string’s contents can be up to 21 bits long. The longer scalar values may need two UInt16 values for storage. Those “pairs” of code units are called surrogate pairs.

    let flowermoji = "💐"
    for v in flowermoji.unicodeScalars {
        print(v, v.value)
    }
    // 💐 128144
    
    for v in flowermoji.utf16 {
        print(v)
    }
    // 55357
    // 56464

    To convert a String.UTF16View instance back into a string, use the String type’s init(_:) initializer.

    let favemoji = "My favorite emoji is 🎉"
    if let i = favemoji.utf16.firstIndex(where: { $0 >= 128 }) {
        let asciiPrefix = String(favemoji.utf16[..<i])!
        print(asciiPrefix)
    }
    // Prints "My favorite emoji is "

    UTF16View Elements Match NSString Characters

    The UTF-16 code units of a string’s utf16 view match the elements accessed through indexed NSString APIs.

    print(flowers.utf16.count)
    // Prints "10"
    
    let nsflowers = flowers as NSString
    print(nsflowers.length)
    // Prints "10"

    Unlike NSString, however, String.UTF16View does not use integer indices. If you need to access a specific position in a UTF-16 view, use Swift’s index manipulation methods. The following example accesses the fourth code unit in both the flowers and nsflowers strings:

    print(nsflowers.character(at: 3))
    // Prints "119"
    
    let i = flowers.utf16.index(flowers.utf16.startIndex, offsetBy: 3)
    print(flowers.utf16[i])
    // Prints "119"

    Although the Swift overlay updates many Objective-C methods to return native Swift indices and index ranges, some still return instances of NSRange. To convert an NSRange instance to a range of String.Index, use the Range(_:in:) initializer, which takes an NSRange and a string as arguments.

    let snowy = "❄️ Let it snow! ☃️"
    let nsrange = NSRange(location: 3, length: 12)
    if let range = Range(nsrange, in: snowy) {
        print(snowy[range])
    }
    // Prints "Let it snow!"

    Other members in extension

    View members

    Hide members

    This section is hidden by default because it contains too many (116) members.

    Types

    Typealiases

    Show obsolete interfaces (2)

    Hide obsolete interfaces

    Type members

    Show obsolete interfaces (17)

    Hide obsolete interfaces

    Instance members

    Show obsolete interfaces (3)

    Hide obsolete interfaces

    Citizens in Swift

    Conformances

    Types

    Typealiases

    Instance members

    Show obsolete interfaces (1)

    Hide obsolete interfaces

    Instance features

    Show obsolete interfaces (2)

    Hide obsolete interfaces