Swiftのこのクロージャーみたいな記述について質問です


(質問1)  
下のキャプチャ(a),(b)にある書き方はクロージャーなのでしょうか?

クロージャーは以下の様な記述だと思っていまして、(a)はクロージャになると思うのですが、  
(b)の記述はそうでないということでしょうか。

[code]

    var hogeHoge = { (parameters) -> return type in
        statements
    }
    
[/code]

(質問2)  
Playgroundで見ると、キャプチャにあるように(a),(b)は実行結果が違います。  
末尾に括弧があるかどうかの違いで、文法的にはどういう差になるのでしょうか?  
(a)は(b)の()を省略したくらいに思ってます。

よろしくお願いします。

[![Playgroundのキャプチャ](https://i.stack.imgur.com/dXttv.png)](https://i.stack.imgur.com/dXttv.png)




(テキストで表現できる質問内容は画像の貼り付けではなく、できるだけテキストにしてください。回答者側のPlaygroundなどにコピペするだけで事象が再現できれば、回答を得られる可能性がより高まります。今回は短いので直接打ち直しましたが。)

まとめて答えた方がわかりやすそうです。

> (質問1)  
>  下のキャプチャ(a),(b)にある書き方はクロージャーなのでしょうか?  
>  (質問2)  
>  Playgroundで見ると、キャプチャにあるように(a),(b)は実行結果が違います。  
>  末尾に括弧があるかどうかの違いで、文法的にはどういう差になるのでしょうか?

(a) `{ return 10 }`の部分がクロージャーで、`hoge`にはクロージャーが代入されます。  
(b) `{ return 10
}`の部分がクロージャーで、`()`は、そのクロージャーを呼び出すことを表します。`foo`にはそのクロージャーを呼び出した結果が代入されます。

> (a)は(b)の()を省略したくらいに思ってます。

クロージャーそのものを操作対象として変数に代入したりメソッドのパラメータに渡すのと、そのクロージャーを呼び出すのとはしっかり区別するようにしてください。Swiftでは、パラメータを取らない関数(メソッドやクロージャーも含めて)を呼び出す場合の`()`は省略できないため「()を省略したくらい」で意味が変わらないように感じられているとしたら大変危険です。

