[Swift] Optionalのmapについて

Substringを使ったSwiftのコードを見ていて、疑問になる部分がありました。
こんな感じのコードです。

1
2
3
4
5
6
7
8
9
10
11
var str: Substring? = .init("Hello World")
 
func removeFromBack(_ x: Substring) -> Substring? {
    ["hello", "world"]
    .compactMap({ x.hasSuffix($0) ? x.dropLast($0.count) : nil})
    .first
}
 
while str != "", let ss = str.flatMap(removeFromBack) {
    str = ss
}

SubstringなのにSubstring?にしているのは何故なんだろうと思いました。
いろいろ調べていくと、SwiftのOptional型について理解が深まりました。

結論

  • Optionalにすることで、removeFromBack関数の中でSubstringを扱うことができる

Optionalの型についてmapやflatMapを使うと、その中ではOptionalを外した形でアクセスできます。
この例ではそれを上手く使って、removeFromBackにSubstringを渡して後ろから文字を検索して順次削除していました。
(Substring)を使う場合だと、mapに渡されるものはCharactorになってしまいます。
人のソースコードを読むと勉強になります。

参考URL

0 件のコメント :

コメントを投稿