kitoko552.memo

kitoko552のメモ

forEachを使ってSwiftっぽく書く

要点

  • SwiftのforEachを使えば、普通のfor文よりもSwiftっぽく書けます。
  • ただし、配列などのコレクションの中身を変更するようなものはforEachじゃなくてmapとかfilterとかflatMap使いましょう。
// for文
for element in array {
  if element == 2 {
    // Do something
  }
}

// forEach
array.forEach {
  if $0 == 2 {
    // Do something
  }
}

Swiftはfunctionalに書く

Swift界隈でReactive系のライブラリが流行っていることから分かるように、functionalに書く方がSwiftっぽくかっこいいとされています。
なので、functionalに書けるものならfunctionalに書きましょう。
特にSwiftでダサいと思われているのがfor文です。
Swiftでfor文はダサいです。
for文を見つけたら書き換えたくなるのがSwifterです(適当)。

for文書き換えの基本はmap, filter, flatMap

for文を使わないならどうやって書くのか?
その基本となるメソッドがmap, filter, flatMapです。
それぞれについては他の記事を参考にしてください。

しかしmap, filter, flatMapはコレクションの中身を変換して新しいコレクションを返すものなので、別に新しいコレクションを返したいわけじゃないときに困ります。

// こんな感じで書きたいけど、新しい配列返すからそれ使えよ的な警告が表示されます。
array.map {
  if $0 == 2 {
    // Do something
  }
}

こうなると、
「for文を使わざるを得ないか。。」
としぶしぶfor文を使っていた方もいると思います。

for element in array {
  if element == 2 {
    // Do something
  }
}

こんなときはforEach

でもfor文を使う必要はありません。
SwiftにはforEachというメソッドがあります。

array.forEach {
  if $0 == 2 {
    // Do something
  }
}

こいつを使えばmap, filter, flatMapみたいな書き方でfor文を書き換えることができます。
まああんまり変わらないんですが、map, filter, flatMapと書き方が統一できてSwiftっぽくなるのでオススメです。

おわり