悩める子羊に合の手(いよっ!)を送るこのコーナー。
答えて~ズン!ズン!
第2回の今回は、
アメブロの外よりお越しのarudenteさんからのご質問です。
いや~。来ましたね~。コーナー化成功です。
「とりあえず聞いてみよう」と思うその1歩が道となります。猪木的に言えば。
arudenteさんのその1歩。ネタ的にも無駄にしませんよ。
それではさっそく行ってみましょう!
【arudenteさんからのご質問】
質問です
お父ちゃんのブログと平行して「はじめてのiphoneプログラミング」の本も参考に勉強しています。
いつも楽しく勉強させていただいており感謝の気持ちでいっぱいです。
質問ですが、IBActionの後ろに :(id)senderが本には記載されています。
:(id)sender はあってもなくても良いものなんでしょうか?
初歩の初歩的な質問ですみませんが、よろしくお願いします。
参照記事 : ドムドムその5:次回の準備と前回の補足
そんな~こちらこそ感謝の気持ちでいっぱいです~。
できれば次回からはこのブログから本を買っt
さてさて。
idとsenderのお話ですね。
これも説明を飛ばしてきたところですので、
ナイスタイミングです。しっかりバラして理解しておきましょう。
arudenteさんの本にはこんな感じで書いてあったんじゃないかと思います。
– (IBAction) XXXX(メソッド名): (id) sender;
で、この : (id) sender ってナニモノかしら?と。
順番に考えていきましょうか。
– (IBAction) XXXX(メソッド名)ってのは、この辺でもお話ししたように、
開発基礎トレ2:アウトレットとアクションの使い方
・アクションは、【部品】→【プログラム】へ情報を伝える配線
でした。
View上(画面上)でボタンやテキストフィールドなどの部品がタッチされたら、
アクションを通じてプログラムが実行されるわけです。
で、このとき。
ボタンをタッチしたらルーレットが回る。
このようなアクションであれば、
「タッチされたかどうか」が問題なのでボタンの情報は必要ありませんね。
でも
画像をタッチしたらその画像の名前をラベルに表示したい。
このようなアクションの場合、
「タッチされた」後に、「何の画像がタッチされたの?」のような、
タッチされた部品の情報、つまり、引数が欲しくなるわけです。
ということで。
: (id) sender は、引数なんです。
(id) は引数の型のことで、
Objective-Cのオブジェクトなら何でもOK型を意味しています。
(UITextField *) みたいに書く代わりに (id) と書けるんです。
便利なんですけど何でもアリになってしまうので、
セキュリティ上と自分の中での整理上好ましく無い場合は、
きちんとしたクラス名を書くこともできます。
で、sender は引数の名前です。
お作法なのでこう書いておけばOKです。
アクションに接続されている部品(オブジェクト)が
丸ごとポーンと引数で渡されます。
先ほどの例で言うと、
画像の名前とか、サイズとか、そんなチマチマした項目単位で渡すんじゃなくて、
丸ごと1匹。後は勝手に捌いてくれ。
そんなオットコマエな渡し方が : (id) sender です。
ご質問のお答え的には
Q:
:(id)sender はあってもなくても良いものなんでしょうか?
A:
部品情報が要らないなら不要。部品情報が欲しいなら必要。
ということでいかがでしょう!
arudenteさんの輝く笑顔を待ってます。
納得いかなかったらもう1回コメントを!
それでは次回お会いしましょう。
答えて~ズン!ズン!