文書   >   Swift   >  String   >   Index   >   init(_:within:)
イニシャライザ
init(_:within:)
与えられた文字列に、指定された位置に正確に対応するインデックスを作成します。
宣言
パラメータ
sourcePosition | target パラメータのビュー内の位置。sourcePosition は、target の少なくとも 1 つのビューの有効なインデックスでなければなりません。 |
target | 結果のインデックスによって参照される文字列。 |
議論
sourcePosition として渡されたインデックスが拡張書記素クラスタの先頭 (文字列の要素型) を表す場合、初期化子は成功します。
以下の例では、Unicode スカラ "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é"
sourcePosition として渡されたインデックスに target 内の正確に対応する位置がない場合、イニシャライザの結果は nil です。たとえば、結合する鋭アクセント記号 ("\u{0301}") の位置を変換しようとしても失敗します。Unicode スカラーを結合しても、文字列内でのそれ自体の位置は変わりません。
let nextScalarsIndex = cafe.unicodeScalars.index(after: scalarsIndex)
let nextStringIndex = String.Index(nextScalarsIndex, within: cafe)
print(nextStringIndex)
// Prints "nil"
トップへ
トップへ
トップへ
トップへ