Structureswift 6.0.1Swift
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
struct Index
A position of a character or code unit in a string.
struct Iterator
struct UTF8View
A view of a string’s contents as a collection of UTF-8 code units.
struct UnicodeScalarView
A view of a string’s contents as a collection of Unicode scalar values.
Typealiases
typealias Element
typealias SubSequence
typealias UnicodeScalarIndex
The index type for a string’s
unicodeScalars
view.
Show obsolete interfaces (2)
Hide obsolete interfaces
typealias CharacterView
A view of a string’s contents as a collection of characters.
typealias IndexDistance
A type that represents the number of steps between two
String.Index
values, where one value is reachable from the other.
Type members
init(
) Creates an empty string.
init(String.UnicodeScalarView
) Creates a string corresponding to the given collection of Unicode scalars.
init(String.UTF8View
) Creates a string corresponding to the given sequence of UTF-8 code units.
init(String.UTF16View
) Creates a string corresponding to the given sequence of UTF-16 code units.
init(Character
) Creates a string containing the given character.
init?(Substring.UTF8View
) Creates a String having the given content.
init?(Substring.UTF16View
) Creates a String having the given content.
init(Substring.UnicodeScalarView
) Creates a String having the given content.
init(Substring
) Creates a new string from the given substring.
init(Unicode.Scalar
) init<S>(S
) Creates a new string containing the characters in the given sequence.
init<S>(S
) Creates a new string containing the characters in the given sequence.
init<T>(T
) Creates an instance from the description of a given
LosslessStringConvertible
instance.init<T>(T, radix: Int, uppercase: Bool
) Creates a string representing the given value in base 10, or some other specified base.
init(cString: UnsafePointer<CChar>
) Creates a new string by copying the null-terminated UTF-8 data referenced by the given pointer.
init(cString: UnsafePointer<UInt8>
) Creates a new string by copying the null-terminated UTF-8 data referenced by the given pointer.
init?<T>(codingKey: T
) init<C, Encoding>(decoding: C, as: Encoding.Type
) init<Encoding>(decodingCString: UnsafePointer<Encoding.CodeUnit>, as: Encoding.Type
) Creates a new string by copying the null-terminated sequence of code units referenced by the given pointer.
init<Subject>(describing: Subject
) Creates a string representing the given value.
init<Subject>(describing: Subject
) Creates a string representing the given value.
init<Subject>(describing: Subject
) Creates a string representing the given value.
init<Subject>(describing: Subject
) Creates a string representing the given value.
init(from: any Decoder
) throws init<Subject>(reflecting: Subject
) Creates a string with a detailed representation of the given value, suitable for debugging.
init(repeating: String, count: Int
) Creates a new string representing the given string repeated the specified number of times.
init(repeating: Character, count: Int
) Creates a string representing the given character repeated the specified number of times.
init(stringInterpolation: DefaultStringInterpolation
) Creates a new instance from an interpolated string literal.
init(stringLiteral: String
) Creates an instance initialized to the given string value.
init(unsafeUninitializedCapacity: Int, initializingUTF8With: (UnsafeMutableBufferPointer<UInt8>) throws -> Int
) rethrows Creates a new string with the specified capacity in UTF-8 code units, and then calls the given closure with a buffer covering the string’s uninitialized memory.
init?<Encoding>(validating: some Sequence, as: Encoding.Type
) Creates a new string by copying and validating the sequence of code units passed in, according to the specified encoding.
init?<Encoding>(validating: some Sequence<Int8>, as: Encoding.Type
) Creates a new string by copying and validating the sequence of code units passed in, according to the specified encoding.
init?(validatingCString: UnsafePointer<CChar>
) Creates a new string by copying and validating the null-terminated UTF-8 data referenced by the given pointer.
static func decodeCString<Encoding>(UnsafePointer<Encoding.CodeUnit>?, as: Encoding.Type, repairingInvalidCodeUnits: Bool
) -> (result: String, repairsMade: Bool)? Creates a new string by copying the null-terminated data referenced by the given pointer using the specified encoding.
static func decodeCString<Encoding>([Encoding.CodeUnit], as: Encoding.Type, repairingInvalidCodeUnits: Bool
) -> (result: String, repairsMade: Bool)? static func + (lhs: String, rhs: String
) -> String static func += (lhs: inout String, rhs: String
) static func < (lhs: String, rhs: String
) -> Bool static func == (lhs: String, rhs: String
) -> Bool static func ~= (lhs: String, rhs: Substring
) -> Bool
Show obsolete interfaces (17)
Hide obsolete interfaces
init(cString: String
) init(cString: [CChar]
) Creates a new string by copying the null-terminated UTF-8 data referenced by the given array.
init(cString: [UInt8]
) Creates a new string by copying the null-terminated UTF-8 data referenced by the given array.
init(cString: inout CChar
) init(cString: inout UInt8
) init<Encoding>(decodingCString: String, as: Encoding.Type
) init<Encoding>(decodingCString: inout Encoding.CodeUnit, as: Encoding.Type
) init<Encoding>(decodingCString: [Encoding.CodeUnit], as: Encoding.Type
) Creates a new string by copying the null-terminated sequence of code units referenced by the given array.
init?(validatingCString: String
) init?(validatingCString: [CChar]
) Creates a new string by copying and validating the null-terminated UTF-8 data referenced by the given array.
init?(validatingCString: inout CChar
) init?(validatingUTF8: UnsafePointer<CChar>
) Creates a new string by copying and validating the null-terminated UTF-8 data referenced by the given pointer.
init?(validatingUTF8: String
) init?(validatingUTF8: [CChar]
) Creates a new string by copying and validating the null-terminated UTF-8 data referenced by the given array.
init?(validatingUTF8: inout CChar
) static func decodeCString<Encoding>(inout Encoding.CodeUnit, as: Encoding.Type, repairingInvalidCodeUnits: Bool
) -> (result: String, repairsMade: Bool)? static func decodeCString<Encoding>(String, as: Encoding.Type, repairingInvalidCodeUnits: Bool
) -> (result: String, repairsMade: Bool)?
Instance members
var codingKey: any CodingKey
var count: Int
The number of characters in a string.
var customMirror: Mirror
A mirror that reflects the
String
instance.var debugDescription: String
A representation of the string that is suitable for debugging.
var description: String
The value of this string.
var endIndex: String.Index
A string’s “past the end” position—that is, the position one greater than the last valid subscript argument.
var isContiguousUTF8: Bool
Returns whether this string is capable of providing access to validly-encoded UTF-8 contents in contiguous memory in O(1) time.
var isEmpty: Bool
A Boolean value indicating whether a string has no characters.
var startIndex: String.Index
The position of the first character in a nonempty string.
var unicodeScalars: String.UnicodeScalarView
The string’s value represented as a collection of Unicode scalar values.
var utf16: String.UTF16View
A UTF-16 encoding of
self
.var utf8: String.UTF8View
A UTF-8 encoding of
self
.var utf8CString: ContiguousArray<CChar>
A contiguously stored null-terminated UTF-8 representation of the string.
subscript(String.Index
) -> Character Accesses the character at the given position.
subscript(Range<String.Index>
) -> Substring func append(Character
) Appends the given character to the string.
func append(String
) Appends the given string to this string.
func append(contentsOf: String
) func append(contentsOf: Substring
) func append<S>(contentsOf: S
) Appends the characters in the given sequence to the string.
func distance(from: String.Index, to: String.Index
) -> Int Returns the distance between two indices.
func encode(to: any Encoder
) throws Encodes this value into the given encoder.
func hasPrefix(String
) -> Bool func hasSuffix(String
) -> Bool func hash(into: inout Hasher
) Hashes the essential components of this value by feeding them into the given hasher.
func index(String.Index, offsetBy: Int
) -> String.Index Returns an index that is the specified distance from the given index.
func index(String.Index, offsetBy: Int, limitedBy: String.Index
) -> String.Index? Returns an index that is the specified distance from the given index, unless that distance is beyond a given limiting index.
func index(after: String.Index
) -> String.Index Returns the position immediately after the given index.
func index(before: String.Index
) -> String.Index func insert(Character, at: String.Index
) Inserts a new character at the specified position.
func insert<S>(contentsOf: S, at: String.Index
) Inserts a collection of characters at the specified position.
func lowercased(
) -> String Returns a lowercase version of the string.
func makeContiguousUTF8(
) If this string is not contiguous, make it so. If this mutates the string, it will invalidate any pre-existing indices.
func makeIterator(
) -> String.Iterator func max<T>(T, T
) -> T func min<T>(T, T
) -> T func remove(at: String.Index
) -> Character Removes and returns the character at the specified position.
func removeAll(keepingCapacity: Bool
) Replaces this string with the empty string.
func removeSubrange(Range<String.Index>
) Removes the characters in the given range.
func replaceSubrange<C>(Range<String.Index>, with: C
) Replaces the text within the specified bounds with the given characters.
func reserveCapacity(Int
) Reserves enough space in the string’s underlying storage to store the specified number of ASCII characters.
func uppercased(
) -> String Returns an uppercase version of the string.
func withCString<Result>((UnsafePointer<Int8>) throws -> Result
) rethrows -> Result func withCString<Result, TargetEncoding>(encodedAs: TargetEncoding.Type, (UnsafePointer<TargetEncoding.CodeUnit>) throws -> Result
) rethrows -> Result func withUTF8<R>((UnsafeBufferPointer<UInt8>) throws -> R
) rethrows -> R Runs
body
over the content of this string in contiguous memory. If this string is not contiguous, this will first make it contiguous, which will also speed up subsequent access. If this mutates the string, it will invalidate any pre-existing indices.func write(String
) Appends the given string to this string.
func write<Target>(to: inout Target
) Writes the string into the given output stream.
Show obsolete interfaces (3)
Hide obsolete interfaces
var characters: String
A view of the string’s contents as a collection of characters.
var customPlaygroundQuickLook: _PlaygroundQuickLook
A custom playground Quick Look for the
String
instance.func withMutableCharacters<R>((inout String) -> R
) -> R Applies the given closure to a mutable view of the string’s characters.
Citizens in Swift
Conformances
protocol BidirectionalCollection<Element>
A collection that supports backward as well as forward traversal.
protocol Collection<Element>
A sequence whose elements can be traversed multiple times, nondestructively, and accessed by an indexed subscript.
protocol Copyable
A type whose values can be implicitly or explicitly copied.
protocol CustomDebugStringConvertible
A type with a customized textual representation suitable for debugging purposes.
protocol CustomReflectable
A type that explicitly supplies its own mirror.
protocol CustomStringConvertible
A type with a customized textual representation.
protocol Escapable
protocol Sendable
protocol Sequence<Element>
A type that provides sequential, iterated access to its elements.
Types
Typealiases
Instance members
var count: Int
var customMirror: Mirror
Returns a mirror that reflects the UTF-16 view of a string.
var debugDescription: String
var description: String
var endIndex: String.UTF16View.Index
The “past the end” position—that is, the position one greater than the last valid subscript argument.
var startIndex: String.UTF16View.Index
The position of the first code unit if the
String
is nonempty; identical toendIndex
otherwise.subscript(Range<String.UTF16View.Index>
) -> Substring.UTF16View subscript(String.UTF16View.Index
) -> UTF16.CodeUnit Accesses the code unit at the given position.
func distance(from: String.UTF16View.Index, to: String.UTF16View.Index
) -> Int func index(String.UTF16View.Index, offsetBy: Int
) -> String.UTF16View.Index func index(String.UTF16View.Index, offsetBy: Int, limitedBy: String.UTF16View.Index
) -> String.UTF16View.Index? func index(after: String.UTF16View.Index
) -> String.UTF16View.Index func index(before: String.UTF16View.Index
) -> String.UTF16View.Index func makeIterator(
) -> String.UTF16View.Iterator
Show obsolete interfaces (1)
Hide obsolete interfaces
Instance features
var first: Self.Element?
The first element of the collection.
var indices: DefaultIndices<Self>
The indices that are valid for subscripting the collection, in ascending order.
var isEmpty: Bool
A Boolean value indicating whether the collection is empty.
var last: Self.Element?
The last element of the collection.
var lazy: LazySequence<Self>
A sequence containing the same elements as this sequence, but on which some operations, such as
map
andfilter
, are implemented lazily.var underestimatedCount: Int
A value less than or equal to the number of elements in the collection.
subscript<R>(R
) -> Self.SubSequence Accesses the contiguous subrange of the collection’s elements specified by a range expression.
subscript((UnboundedRange_) -> ()
) -> Self.SubSequence subscript(RangeSet<Self.Index>
) -> DiscontiguousSlice<Self> Accesses a view of this collection with the elements at the given indices.
func allSatisfy((Self.Element) throws -> Bool
) rethrows -> Bool Returns a Boolean value indicating whether every element of a sequence satisfies a given predicate.
func compactMap<ElementOfResult>((Self.Element) throws -> ElementOfResult?
) rethrows -> [ElementOfResult] Returns an array containing the non-
nil
results of calling the given transformation with each element of this sequence.func contains(Self.Element
) -> Bool Returns a Boolean value indicating whether the sequence contains the given element.
func contains(where: (Self.Element) throws -> Bool
) rethrows -> Bool Returns a Boolean value indicating whether the sequence contains an element that satisfies the given predicate.
func count<E>(where: (Self.Element)
throws Returns the number of elements in the sequence that satisfy the given predicate.
func difference<C>(from: C
) -> CollectionDifference<Self.Element> Returns the difference needed to produce this collection’s ordered elements from the given collection.
func difference<C>(from: C, by: (C.Element, Self.Element) -> Bool
) -> CollectionDifference<Self.Element> Returns the difference needed to produce this collection’s ordered elements from the given collection, using the given predicate as an equivalence test.
func drop(while: (Self.Element) throws -> Bool
) rethrows -> Self.SubSequence Returns a subsequence by skipping elements while
predicate
returnstrue
and returning the remaining elements.func dropFirst(Int
) -> Self.SubSequence Returns a subsequence containing all but the given number of initial elements.
func dropLast(Int
) -> Self.SubSequence Returns a subsequence containing all but the specified number of final elements.
func elementsEqual<OtherSequence>(OtherSequence
) -> Bool Returns a Boolean value indicating whether this sequence and another sequence contain the same elements in the same order.
func elementsEqual<OtherSequence>(OtherSequence, by: (Self.Element, OtherSequence.Element) throws -> Bool
) rethrows -> Bool Returns a Boolean value indicating whether this sequence and another sequence contain equivalent elements in the same order, using the given predicate as the equivalence test.
func enumerated(
) -> EnumeratedSequence<Self> Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence.
func filter((Self.Element) throws -> Bool
) rethrows -> [Self.Element] Returns an array containing, in order, the elements of the sequence that satisfy the given predicate.
func first(where: (Self.Element) throws -> Bool
) rethrows -> Self.Element? Returns the first element of the sequence that satisfies the given predicate.
func firstIndex(of: Self.Element
) -> Self.Index? Returns the first index where the specified value appears in the collection.
func firstIndex(where: (Self.Element) throws -> Bool
) rethrows -> Self.Index? Returns the first index in which an element of the collection satisfies the given predicate.
func flatMap<SegmentOfResult>((Self.Element) throws -> SegmentOfResult
) rethrows -> [SegmentOfResult.Element] Returns an array containing the concatenated results of calling the given transformation with each element of this sequence.
func forEach((Self.Element) throws -> Void
) rethrows Calls the given closure on each element in the sequence in the same order as a
for
-in
loop.func formIndex(inout Self.Index, offsetBy: Int
) Offsets the given index by the specified distance.
func formIndex(inout Self.Index, offsetBy: Int, limitedBy: Self.Index
) -> Bool Offsets the given index by the specified distance, or so that it equals the given limiting index.
func formIndex(after: inout Self.Index
) Replaces the given index with its successor.
func formIndex(before: inout Self.Index
) func indices(of: Self.Element
) -> RangeSet<Self.Index> Returns the indices of all the elements that are equal to the given element.
func indices(where: (Self.Element) throws -> Bool
) rethrows -> RangeSet<Self.Index> Returns the indices of all the elements that match the given predicate.
func last(where: (Self.Element) throws -> Bool
) rethrows -> Self.Element? Returns the last element of the sequence that satisfies the given predicate.
func lastIndex(of: Self.Element
) -> Self.Index? Returns the last index where the specified value appears in the collection.
func lastIndex(where: (Self.Element) throws -> Bool
) rethrows -> Self.Index? Returns the index of the last element in the collection that matches the given predicate.
func lexicographicallyPrecedes<OtherSequence>(OtherSequence
) -> Bool Returns a Boolean value indicating whether the sequence precedes another sequence in a lexicographical (dictionary) ordering, using the less-than operator (
<
) to compare elements.func lexicographicallyPrecedes<OtherSequence>(OtherSequence, by: (Self.Element, Self.Element) throws -> Bool
) rethrows -> Bool Returns a Boolean value indicating whether the sequence precedes another sequence in a lexicographical (dictionary) ordering, using the given predicate to compare elements.
func map<T, E>((Self.Element)
throws Returns an array containing the results of mapping the given closure over the sequence’s elements.
func map<T, E>((Self.Element)
throws Returns an array containing the results of mapping the given closure over the sequence’s elements.
func max(
) -> Self.Element? Returns the maximum element in the sequence.
func max(by: (Self.Element, Self.Element) throws -> Bool
) rethrows -> Self.Element? Returns the maximum element in the sequence, using the given predicate as the comparison between elements.
func min(
) -> Self.Element? Returns the minimum element in the sequence.
func min(by: (Self.Element, Self.Element) throws -> Bool
) rethrows -> Self.Element? Returns the minimum element in the sequence, using the given predicate as the comparison between elements.
func prefix(Int
) -> Self.SubSequence Returns a subsequence, up to the specified maximum length, containing the initial elements of the collection.
func prefix(through: Self.Index
) -> Self.SubSequence Returns a subsequence from the start of the collection through the specified position.
func prefix(upTo: Self.Index
) -> Self.SubSequence Returns a subsequence from the start of the collection up to, but not including, the specified position.
func prefix(while: (Self.Element) throws -> Bool
) rethrows -> Self.SubSequence Returns a subsequence containing the initial elements until
predicate
returnsfalse
and skipping the remaining elements.func randomElement(
) -> Self.Element? Returns a random element of the collection.
func randomElement<T>(using: inout T
) -> Self.Element? Returns a random element of the collection, using the given generator as a source for randomness.
func reduce<Result>(Result, (Result, Self.Element) throws -> Result
) rethrows -> Result Returns the result of combining the elements of the sequence using the given closure.
func reduce<Result>(into: Result, (inout Result, Self.Element) throws -> ()
) rethrows -> Result Returns the result of combining the elements of the sequence using the given closure.
func removingSubranges(RangeSet<Self.Index>
) -> DiscontiguousSlice<Self> Returns a collection of the elements in this collection that are not represented by the given range set.
func reversed(
) -> ReversedCollection<Self> Returns a view presenting the elements of the collection in reverse order.
func shuffled(
) -> [Self.Element] Returns the elements of the sequence, shuffled.
func shuffled<T>(using: inout T
) -> [Self.Element] Returns the elements of the sequence, shuffled using the given generator as a source for randomness.
func sorted(
) -> [Self.Element] Returns the elements of the sequence, sorted.
func sorted(by: (Self.Element, Self.Element) throws -> Bool
) rethrows -> [Self.Element] Returns the elements of the sequence, sorted using the given predicate as the comparison between elements.
func split(maxSplits: Int, omittingEmptySubsequences: Bool, whereSeparator: (Self.Element) throws -> Bool
) rethrows -> [Self.SubSequence] Returns the longest possible subsequences of the collection, in order, that don’t contain elements satisfying the given predicate.
func split(separator: Self.Element, maxSplits: Int, omittingEmptySubsequences: Bool
) -> [Self.SubSequence] Returns the longest possible subsequences of the collection, in order, around elements equal to the given element.
func starts<PossiblePrefix>(with: PossiblePrefix
) -> Bool Returns a Boolean value indicating whether the initial elements of the sequence are the same as the elements in another sequence.
func starts<PossiblePrefix>(with: PossiblePrefix, by: (Self.Element, PossiblePrefix.Element) throws -> Bool
) rethrows -> Bool Returns a Boolean value indicating whether the initial elements of the sequence are equivalent to the elements in another sequence, using the given predicate as the equivalence test.
func suffix(Int
) -> Self.SubSequence Returns a subsequence, up to the given maximum length, containing the final elements of the collection.
func suffix(from: Self.Index
) -> Self.SubSequence Returns a subsequence from the specified position to the end of the collection.
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Self.Element>) throws -> R
) rethrows -> R?
Show obsolete interfaces (2)
Hide obsolete interfaces
func flatMap<ElementOfResult>((Self.Element) throws -> ElementOfResult?
) rethrows -> [ElementOfResult] func index(of: Self.Element
) -> Self.Index? Returns the first index where the specified value appears in the collection.