モーダルビューやらUIKit内クラスやらクロージャやら
今日も入門書のサンプルコードを写経しながらなんとなく理解した内容を書いていきます。
多分間違ってるんだろうな、でも追記で直せばいいんじゃ (参考にならなければすみません。)
/*
●モーダルビュー
present を実行すると、新しい画面がオーバーラップするように画面遷移する。これをモーダルビューと呼ぶ。
ViewControllerを移動せずに新しい画面、機能を呼び出しできる。なんでSegueと違って別のswiftファイルと値の受け渡しをせんでもいいし
画面遷移に際した初期化とかもせんでいい これは便利 でもたぶんモーダルは単機能を有する画面(カメラやらアラートやら)のみを想定されてる気がする
もう少し詳しくなったらちゃんと書く 場数ふんだらすぐわかる
12/4 同日追記 これアラート出す(その画面以外の操作を不能にする)事をモーダルと呼ぶだけで、Segueのオプションとして画面が下から出てくるモーダル遷移もあるらしい 混ざるな
>>>>>>>>>>>>>>>
present(hoge, animater:true, completion: nil)
>>>>>>>>>>>>>>>
第一引数 hoge どの画面を表示させるかを指定。このプログラムだとインスタンス化させたimagePickerControllerを指定
第二引数 animated:true 表示するときアニメーションをするかしないか
第三引数 completion:nil モーダルビューの表示が完了した後で、追加で処理を行いたい場合に指示。なければnil
●UIActivityViewController 別のアプリにデータを飛ばしたいときにしたから出てくるあのポップアップ SNS投稿とかにつかう
第一引数 シェアするコンテンツの配列を指定 第二引数 iOS標準として搭載されていないサービスを拡張する場合に指定。拡張しないならnilを指定
●UIKitクラスのデフォルト引数あるある おそら別クラスでも同じ名前の引数なら意味は共用のはず(知らずに書いてる)
handler...そのメソッドを実行した際、任意の処理をクロージャーに入れておけば実行してくれる example. モーダルでダイアログを出して、各選択肢をUIAlertActionで定義するとき、インスタンスを生成する際の引数にhandlerをクロージャで記載すれば 選択肢をおしたときに任意の処理を行える(カメラ立ち上げたりSNS投稿をしたら)
style... .defaultで通常、.cancelでキャンセル処理、.destructiveでデータが消える
destructiveって何に使うんだ...?同一インスタンスの中で保持している全データを空にするとかかな
completion... そのメソッドを実行し、完了した際に任意の処理をクロージャーに入れておけば実行してくれる handlerとの違いはタイミング?
※UIKitのクラス一覧を書いてくれたQiita記事を見つけた 神かな?2018年の記事だから情報古いだろうけど大概そのままつかえる予感
https://qiita.com/m-yamada1992/items/24064011779e43b52dc7
まとまった処理を定義できるデータ構造 算数で言うとこのかっこ算
変数に格納すれば再利用が可能、引数として渡せる(handlerとして渡すとかがわかりやすい、ほかfor文の試行回数とか?)、型として定義することができる
クロージャは名前や不要な情報をはしょって記述できるので、可読性、軽量化を望める汎用性の高いデータ構造
>>>>>>>>>>>?
{(引数) -> 戻り値の方 in
処理
return
}
>>>>>>>>>>>>
クロージャ中が1行の時、returnを省略できる(暗黙的なreturn)
引数がない場合、()の中はいらない 返り血もない場合() -> の両方の記載ごと飛ばせる
sample// let closure = {print("hoge")}
ちなみに変数に格納(代入)したら再利用できる。呼び出し方は 変数名()
さらに、変数を定義するときの方としても扱うことが可能。この辺でようわからん...わかったらかく