はじめに
iOSの開発の初心者にとってDelegate
に続く厄介な敵がおそらく、このクロージャじゃないでしょうか笑
僕はそうでした笑
なので、今回はこの強敵であるクロージャを攻略したいと思います!!
クロージャとは
そもそもクロージャとは、なんぞやというとことから始めます。
ずばり、無名関数!ですね。
無名関数?ってなる人もいるかもしれないので、実際にコードでみていこうと思います!
普通の関数
funcnon_closure(str:String)->String{return"こんにちは\(str)さん"}non_closure(str:"佐藤")//出力:こんにちは佐藤さん
クロージャを使ってみる
名前の文字数が少ない順に並び替える処理をどんどん省略しながら書いていきます!
letnames=["Chris","Alex","Ewa","Barry","Daniella"]varnameArr:[String]=[]//通常のクロージャの書き方nameArr=names.sorted(by:{(s1:String,s2:String)->Boolinreturns1>s2})//1行でまとめるnameArr=names.sorted(by:{(s1:String,s2:String)->Boolinreturns1>s2})//省略できるところは省略する//引数、戻り値の型は推論できるので、省略するnameArr=names.sorted(by:{s1,s2inreturns1>s2})//戻り値は暗黙に返すため、省略可能nameArr=names.sorted(by:{s1,s2ins1>s2})//$0などの書き方で、引数の定義自体を省略できる//$0,$1,$2と引数は自動的に略式で書くことができるnameArr=names.sorted(by:{$0>$1})//オペレータ関数をつかうとここまで省略可能nameArr=names.sorted(by:>)print(nameArr)
クロージャの使い道
- 引数としてクロージャを用いる
- 関数としての役割も持ちながらも変数として処理したい時
に使います!