Structure

String.UTF16View

A view of a string’s contents as a collection of UTF-16 code units. ある文字列の内容のひとつの見方、いくらかのUTF-16コード単位のコレクションとして。

Declaration 宣言

@frozen struct UTF16View

Overview 概要

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. あなたは文字列の持つビューのUTF-16コード単位にアクセスすることが、それのutf16プロパティを使うことで行えます。文字列のもつUTF-16ビューは、文字列のもつユニコードスカラー値を16ビット整数として符号化します。


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. 文字列のもつ内容を構成するユニコードスカラー値は、21ビット長に至るまで可能です。より長いスカラー値は、2つのUInt16値をストレージとして必要とするかもしれません。それら「ペア」のコード単位は、サロゲートペアと呼ばれます。


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. String.UTF16Viewインスタンスを逆に文字列へと変換するには、String型のもつinit(_:)イニシャライザを使ってください。


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 UTF16View要素はNSString文字に一致します

The UTF-16 code units of a string’s utf16 view match the elements accessed through indexed NSString APIs. 文字列のもつutf16ビューのUTF-16コード単位は、NSString APIでインデックスを使われることでアクセスされる要素と一致します。


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: しかしながら、NSStringとは違い、String.UTF16Viewは整数インデックスを使いません。あなたがUTF-16ビューにおいて特定の位置にアクセスする必要があるならば、Swiftのインデックス操作メソッドを使ってください。以下の例は、flowersnsflowers文字列の両方で4番目のコード単位にアクセスします:


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. Swiftオーバーレイが多くのObjective-Cメソッドを更新してSwift生来のインデックスおよびインデックス範囲を返すとはいえ、いくつかはまだNSRangeインスタンスを返します。NSRangeインスタンスをString.Indexの範囲へ変換するには、Range(_:in:)イニシャライザを使ってください、それはNSRangeと文字列を引数として取ります。


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!"

Topics 話題

Type Aliases 型エイリアス

Instance Properties 様々なインスタンスプロパティ

Instance Methods インスタンスメソッド

Subscripts 添え字

Structures 構造体

Relationships 関係

From Protocol 由来プロトコル

See Also 参照

Related String Types 関連した文字列型