【Swift】文字列の先頭を取得/削除する方法!hasPrefix
この記事からわかること
- Swiftで文字列の先頭文字を取得/削除する方法
- firstプロパティとは?
- dropFirstメソッドとは?
- prefixメソッドとは?
- hasPrefixメソッドとは?
- SubSequenceとSubstringとは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:14.3.1
- iOS:16.4
- Swift:5.8.1
おすすめ記事:【Swift】文字列の末尾を取得/削除する方法!SubSequenceとは?
Swiftで文字列の先頭1文字を取得する方法
var first: Self.Element? { get }
Swiftで文字列の先頭1文字だけを取得するにはString
構造体のfirst
プロパティを使います。
let str = "Hello World"
print(str.first) // "H"
出力する際はそのままで問題ないですが、変数に格納する際は注意が必要です。first
プロパティで取得した型を出力してみるとオプショナル型のCharacter
に変わっているのが分かります。なのでString
型の変数に格納する際は明示的にキャストして格納します。
let str = "Hello World"
print(type(of: str.first)) // Optional<Character>
var result = String(str.first!)
文字列先頭から任意の文字数を抽出
func prefix(_ maxLength: Int) -> Self.SubSequence
first
プロパティでは最初の1文字だけを取得できましたが任意の文字数だけ抽出したい場合はprefix
メソッドを使用します。引数には抜き出したい文字数を数値(Int型)で指定します。
let str = "Hello World"
print(str.prefix(5)) // Hello
prefix
メソッドの戻り値はSubstring
になります。
let str = "Hello World"
print(type(of: str.prefix(5))) // Substring
var result = String(str.prefix(5))
先頭文字を比較する
func hasPrefix(_ prefix: String) -> Bool
文字の先頭を比較した真偽値を取得したい場合はhasPrefix
メソッドを使用します。比較は大文字/小文字を区別するので注意してください。
let str = "Hello World"
if str.hasPrefix("H") {
print("H")
} else {
print("other")
}
文字列の最初の文字を削除する
func dropFirst(_ k: Int) -> Self.SubSequence
文字列の最初の文字を削除するにはdropFirst
メソッドを使用します。
let str = "Hello World"
print(String(str.dropFirst())) // ello World
dropFirst
メソッドの戻り値はSubstring
になります。
let str = "Hello World"
print(type(of: str.dropFirst())) // Substring
var result = String(str.dropFirst())
ですが定義元を見てみると戻り値はSubSequence
となっています。
SubSequenceとは?
SubSequence
型とはコレクションの要素の連続した部分範囲を表すコレクションを表しています。実際に使用される際はその時に適した型が当てはめられて使用されます。今回のようなString型の場合はSubstring
型のタイプエイリアスが当てはまります。
typealias SubSequence = Substring
Swiftでは文字列を表すString型も Collectionプロトコルに準拠しており集合体(Character型の集合)として扱われています。その部分集合としてSubstring
型が返ってくるようになっています。
Substring
型の公式リファレンスによると「文字列をスライスすると高速に処理できるSubstringに変わる」と記載されていました。
どうやら処理を早くするためにキャストされてしまうようです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。