文書   >   Swift   >   Substring


構造体


Substring


文字列のスライス。





宣言


struct Substring


概観


文字列のスライスを作成すると、Substring インスタンスが結果となります。部分文字列 (Substring) を操作するのは、その記憶領域を元の文字列と共有するため、高速かつ効率的です。Substring 型は String と同じインターフェースを提示するため、文字列の内容のコピーを回避または延期することができます。


以下の例では、greeting 文字列を作成してから、最初の文の部分文字列 (Substring) を検索します。


let greeting = "Hi there! It's nice to meet you! 👋"
let endOfSentence = greeting.firstIndex(of: "!")!
let firstSentence = greeting[...endOfSentence]
// firstSentence == "Hi there!"


部分文字列 (Substring) に対して多くの文字列操作を実行できます。ここで、最初の文の長さを見つけて、大文字のバージョンを作成します。


print("'\(firstSentence)' is \(firstSentence.count) characters long.")
// Prints "'Hi there!' is 9 characters long."

let shoutingSentence = firstSentence.uppercased()
// shoutingSentence == "HI THERE!"


部分文字列を文字列に変換


この例では、構造化されていないいくつかのデータを含む rawData 文字列を定義してから、その文字列の prefix(while:) メソッドを使用して数値の接頭辞の部分文字列を作成します。


let rawInput = "126 a.b 22219 zzzzzz"
let numericPrefix = rawInput.prefix(while: { "0"..."9" ~= $0 })
// numericPrefix is the substring "126"


部分文字列 (Substring) を格納したり、String インスタンスを必要とする関数に渡す必要がある場合は、 String(_:) イニシャライザを使用してそれを String に変換できます。このイニシャライザを呼び出すと、部分文字列の内容が新しい文字列にコピーされます。


func parseAndAddOne(_ s: String) -> Int {
    return Int(s, radix: 10)! + 1
}
_ = parseAndAddOne(numericPrefix)
// error: cannot convert value...
let incrementedPrefix = parseAndAddOne(String(numericPrefix))
// incrementedPrefix == 127


あるいは、String を受け取る関数を StringProtocol プロトコルを介して汎用関数に変換することもできます。以下のコードは、parseAndAddOne(_:) 関数の汎用バージョンを宣言しています。


func genericParseAndAddOne<S: StringProtocol>(_ s: S) -> Int {
    return Int(s, radix: 10)! + 1
}
let genericallyIncremented = genericParseAndAddOne(numericPrefix)
// genericallyIncremented == 127


この汎用関数は、String または Substring のいずれかのインスタンスを使用して呼び出すことができます。


重要:

特定の操作を実行するのよりも長く部分文字列 (substring) を保存しないでください。部分文字列は、元の文字列への参照が他にない場合であっても、存在する部分ではなく、それが由来する文字列の記憶領域全体への参照を保持します。したがって、部分文字列を保存すると、それ以外の方法ではアクセスできない文字列データの寿命が延びる可能性があり、これは、メモリリークのように見える可能性があります。


トピックス





型エイリアス





イニシャライザ





インスタンスプロパティ





インスタンスメソッド




@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
編集中
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@



関連

以下も見よ
















トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)
目次
Xcode 10 の新機能

  • 言語:Swift
  • SDK
  • XCode 9.0+
  • 宣言
  • 概観
  • トピックス
  • 関連
  • 以下も見よ












  • トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)