Initializer

init(_:within:)

Creates an index in the given string that corresponds exactly to the specified position. 与えられた文字列の中のあるインデックスを作成します、それは指定された位置に正確に対応します。

Declaration 宣言

init?(_ sourcePosition: String.Index, within target: String)

Parameters パラメータ

sourcePosition

A position in a view of the target parameter. sourcePosition must be a valid index of at least one of the views of target. targetパラメータのあるビューの中のある位置。sourcePositionは、targetの少なくとも1つのビューの有効なインデックスでなければなりません。

target

The string referenced by the resulting index. 結果となるインデックスによって参照される文字列。

Discussion 解説

If the index passed as sourcePosition represents the start of an extended grapheme cluster—the element type of a string—then the initializer succeeds. sourcePositionとして渡されるインデックスが拡張書記素クラスタ — ある文字列の要素型 — の始まりを表すならば、そのときイニシャライザは成功します。

The following example converts the position of the Unicode scalar "e" into its corresponding position in the string. The character at that position is the composed "é" character. 以下の例は、ユニコードスカラー"e"の位置を文字列でのそれの対応位置に変換します。その位置での文字は、合成済"é"文字です。


let cafe = "Cafe\u{0301}"
print(cafe)
// Prints "Café"


let scalarsIndex = cafe.unicodeScalars.firstIndex(of: "e")!
let stringIndex = String.Index(scalarsIndex, within: cafe)!


print(cafe[...stringIndex])
// Prints "Café"

If the index passed as sourcePosition doesn’t have an exact corresponding position in target, the result of the initializer is nil. For example, an attempt to convert the position of the combining acute accent ("\u{0301}") fails. Combining Unicode scalars do not have their own position in a string. sourcePositionとして渡されたインデックスがまさにその対応する位置をtargetにおいて持たないならば、イニシャライザの結果はnilです。例えば、結合文字のアキュートアクセント("\u{0301}")の位置を変換する試みは失敗します。結合ユニコードスカラーは、それら自身の位置を文字列において持ちません。


let nextScalarsIndex = cafe.unicodeScalars.index(after: scalarsIndex)
let nextStringIndex = String.Index(nextScalarsIndex, within: cafe)


print(nextStringIndex)
// Prints "nil"