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