[Swift] Substring の startIndex, endIndex

     
⌛️ 2 min.
Substring が持っている startIndex, endIndex について再確認します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS14.2 RC
  • Xcode 15.1 RC
  • iOS 17.2
  • Swift 5.9

Substring

Substring は、”a slice of a string” として説明されています。
いわゆる 部分文字列 です。

元の文字列があり、その一部分の文字列を表すデータ型です。

Apple のドキュメントは、こちら

base プロパティ

部分文字列の元となっている String を base というプロパティとして参照できます。

”ABCDEF” から抜き出した “BCD” という Substring であれば、base としては、”ABCDEF” という String を持っていることになります。

Collection に conform している Substring

Substring は、 Collection に conform してますので、instance property がいくつか使用できます。

その中に、startIndex, endIndex があります。

注意

なんとなく(?)、Substring が conform している StringProtocol に startIndex, endIndex が定義されていそうな雰囲気ですが、実際には StringProtocol には startIndex, endIndex は定義されていません。

つまり、String の startIndex, endIndex と Substring の startIndex, endIndex は、名前が同じだけで、全く異なる property です。

この Substring は、String 型である base の部分文字列であり、その部分文字列を表現するために startIndex, endIndex が存在します。
ですので、以下のような関係性です。(改めてみると 当たり前に見えます・・・)

let string = "01234567"
let start = string.index(string.startIndex, offsetBy: 2)
let end = string.index(start, offsetBy: 3)
let substring = string[start..<end]

XCTAssertEqual(substring, "234")
XCTAssertEqual(substring.startIndex, start)
XCTAssertEqual(substring.endIndex, end)

String と Substring および、それぞれの startIndex, endIndex の関係性は以下のようになります。

StringSubstring

String の startIndex,endIndex

ちなみに、String の持つ startIndex, endIndex は、String 自身の開始文字位置/ 終了文字位置 という意味です。

使用例としては、”文字列全体をパースしたいときには、startIndex から初めて、< endIndex なる位置までチェック” という時の startIndex, endIndex です。

Substring での startIndex, endIndex は、上記 String の startIndex, endIndex とは少し異なる意味合いのプロパティだとわかります。

String の startIndex, endIndex は、NSString の NSRange と関連が大きいので以下の記事で説明しています。

[Swift] String の範囲指定を理解する (String/Range, NSString/NSRange)

[Swift] String の位置指定を 理解する(String/String.Index と NSString/Int)

まとめ

Substring の startIndex, endIndex について、再確認しました。

Substring の startIndex, endIndex
  • Substring からは、元文字列を base として参照できる
  • Substring は、元文字列から、startIndex..<endIndex として切り出した部分文字列
  • String の startIndex, endIndex とは意味合いが異なる

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

SwiftUI ViewMatery

SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。

英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

SwiftUI 徹底入門

# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。

Swift学習におすすめの本

詳解Swift

Swift の学習には、詳解 Swift という書籍が、おすすめです。

著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。

最新版を購入するのがおすすめです。

現時点では、上記の Swift 5 に対応した第5版が最新版です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です