19
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift(一人)Advent Calendar 2015

Day 10

Swiftのブロックの省略形

Posted at

Swiftの長所として私は配列等のメソッドチェーンやりやすさがあると感じます。
Objective-cと比べるとSwiftはメソッドが短いしブロックをシンプルに書けるのでメソッドチェーンが気持よく書けます。

["1", "2", "3", ""].flatMap { Int($0) }.filter { $0 < 2 }.map { $0 * 2 } // [2]

今回はブロックの省略方法をsortメソッドを例に書いていこうと思います。

通常の書き方

sortメソッドは省略せずに書くと以下のようになります。

let arr = [1, 2, 3]
arr.sort({ (value1: Int, value2: Int) -> Bool in
   return value1 < value2
})

型の省略

型推論によって型を省略できます。

let arr = [1, 2, 3]
arr.sort({ (value1, value2) in
   return value1 < value2
})
// sortメソッドの方に型情報が書いてあるので省略できる
// public func sort(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) -> Bool) -> [Self.Generator.Element]

()も省略できます。

let arr = [1, 2, 3]
arr.sort({ value1, value2 in
   return value1 < value2
})

引数の省略

第一引数、第二引数は$0、$1に置き換える事ができます。
ブロック内が短い時はこの書き方をする事が多いです。

let arr = [1, 2, 3]
arr.sort({
   return $0 < $1
})

returnの省略

ブロックの中身が1行の時はreturnも省略できます。
1行で処理を書く時に便利です。

let arr = [1, 2, 3]
arr.sort({ $0 < $1 })

最後の引数がブロックの時は{}を外に出すことができます。

let arr = [1, 2, 3]
arr.sort() { $0 < $1 }

ブロック以外の引数がない場合、()も省略できます。

let arr = [1, 2, 3]
arr.sort { $0 < $1 }

最初と比べるとすごいシンプルになりました。

let arr = [1, 2, 3]
arr.sort({ (value1: Int, value2: Int) -> Bool in
   return value1 < value2
})
// ↓
arr.sort { $0 < $1 }

おまけ

sortは下の書き方もできます。

let arr = [1, 2, 3]
arr.sort(<)

< の実態は下のような関数なので、sortの引数として渡すことができます。

public func <(lhs: Int, rhs: Int) -> Bool
19
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?