[Swift] Optionalのmapについて

Substringを使ったSwiftのコードを見ていて、疑問になる部分がありました。 こんな感じのコードです。 ```c `gutter:true; 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 - [ArrayとOptionalのmapは同じです](https://qiita.com/koher/items/68585cff691d87124077) - [モナドについてSwiftで説明してみた](https://qiita.com/koher/items/12f72f2fc2db7fa709cf) - [SwiftのOptional型を極める](https://qiita.com/koher/items/c6f446bad54442a28bf4#%E7%AE%B1%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88)

0 件のコメント :

コメントを投稿