>>147
戻り値まで指定しているその2例だと好みの問題かな

戻り値を指定しない場合は
最後のステートメント次第で型が変わる可能性がある

func print2(_ s:String) -> Int {
print(s)
return 10
}
let closure1:() -> Void = { print2("クロージャテスト") }
let closure2 = { print2("クロージャテスト") }

closure1は () -> Void
closure2は () -> Int

---

個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み
func arr2<T>(_ f:()->T) -> [T] { return [f(),f()] }
let a = arr2 { () -> UInt8 in 10*2 }
print(type(of: a ), a) // Array<UInt8> [20, 20]