16
10

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のclosure省略記法

Last updated at Posted at 2016-02-07

他の方々のソースを読んでいる時に、この書き方何?っていうのが特にClosureのあたりに多いので自分なりに一部まとめてみようと思いました。


ちなみにClosureの基本形

closurewithbasic.swift
let closure = {(param1:String, param2:String)-> Bool in
                // 処理内容
                return param1 == param2
              }

省略記法

型推論による省略

sample.swift
// 変数宣言部にInt -> Int とあるので関数型が推論でき、この場合変数名だけの記述で良い。
let square : Int -> Int = {num in return num * num}

// さらに処理内容がreturnだけならreturnも省略できる
let square2 : Int -> Int = {num in num * num}

// なんなら引数のデフォルトで$0, $1も使えるようで"パラメータ in"も省略できる
let square3 : Int -> Int = {$0 * $0}

引数の末尾がClosureの場合の省略(というか書き方)

sample.swift
// これは普通の書き方
let total = calcSum(10, {(num:Int) -> Int in return num * 2})

// 関数のパラメータの末尾がClosureの場合は以下のように書くことができる
let total = calcSum(10) {(num:Int) -> Int in return num * 2}

関数のパラメータがClosure1つだけだった場合の省力

sample.swift
// これは普通の書き方
let twice = calcTwice({(num:Int) -> Int in return num * 2})

// 関数のパラメータがClosure1つだけだった場合はこのように関数の括弧を省略できる
let twice = calcTwice {(num:Int) -> Int in return num * 2}

まとめ

こういう省略を覚えるとつい自分も使いまくりたくなりますが可読性を考えつつ使いたいものです。
しかしながら他の方のコードを読むときはこういうの知っておくと地味にリーディング速度が上がるのでよろしいかと思います。

16
10
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
16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?