配列に特定な条件に合う要素を抽出するのに、よく下記のように for
文回してその中に if
文書いて、条件に合う要素があったら早期リターンし、なかったら for
文の外にデフォルト処理書くかと思います
==================追伸==================
コメントのご指摘を見て確かにこの例は contains
がそのまま使えてあまりよろしくないなぁと思ってコードをちょっと直した。
==================更に追伸==================
そういえばコメントのご指摘の通り first
メソッドがあった。
==================更に追伸終り==================
==================追伸終り==================
let list = ["Apple", "Boy", "Serval Cat"]
func search(for target: String) {
for item in list {
if item.lowercased().hasSuffix(target.lowercased()) {
print("We have a \(item)")
return
}
}
print("We don't have a \(target)")
}
search(for: "cat") // We have a Serval Cat
でもこの書き方、当たる場合と当たらない場合の処理が違う深さのネストに入ってるし、for
文の中の return
に気付かないと for
文の後ろの処理がされない可能性があることに気づかなくてバグの温床になる可能性もあるので、やはり if else
文で回したい。というわけで Sequence
を拡張してみたfirst
を使ってみよう
let list = ["Apple", "Boy", "Serval Cat"]
func search(for target: String) {
if let target = list.first(where: {$0.lowercased().hasSuffix(target.lowercased())}) {
print("We have a \(target)")
} else {
print("We don't have a \(target)")
}
}
search(for: "cat") // We have a Serval Cat
のように使えます。たーのしー!