UIKitの内容を指定する
今日はこんな文が出てきましたよ〜!
cell.textLabel.text = [recipes objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"cake.jpeg"];
中身は違えど、形式同じやね。
〜 . 〜 . 〜 = [〜 : 〜];
こんなです。
リンクによると、この文はデータの中身を決めるために必要なようです。
例えばセルの中身など。
(by http://d.hatena.ne.jp/kazukingband/20111202/1323437363)
ではこないだ紹介した初心者にもわかりやすい本を参考に調べてみましょう!
本によると、最初の【〜 . 】はUI部品(UI Kit)のことをさすようです。
変数名の後ろの【.】ピリオドはプロパティだそうだ。
でもピリオド2つあるねん。
どっちのこと?というか両方??
調べてみると判明しました。
(by http://supportdoc.net/support-iphone/table_basic6.html)
cell のプロパティであるtextLabel、さらにそのプロパティであるtext、ということです。それに文字列を指定することになります。ダブルでプロパティーなんですね。
また、cell.textLabel.textとかcell.imageView.imageはクラスのインスタンスらしい。
〜Lable.textならUIlabelというクラスのインスタンスのtextという属性のもの。
〜View.imageならUIviewというクラスのインスタンスのimageという属性のもの。
ふむふむ。
さらに【=[~:~];】の部分。
ここには何をセットするか書いていく。
細かい事はまだわからないけど、上の例では文字列の@"~"を使って「cake.jpegという名前の(つまりimageNamed)UIimage」をセットしているのがわかるよね。
ちなみに”recipes”というのは同じファイルの冒頭で定義したものです。
@implementation ViewController
{
NSArray *recipes;
}
こんなん。
さらに【indexPath】というのは引数です。
[recipes objectAtIndex:indexPath.row]; ですが、この行為は
「配列の要素を取り出す」ものという説明を見ました。
さっぱり意味わからん。
アインシュタインは6歳の子供に説明できなければ、本当にわかっているとは言えないと言っていました。
おそらくこの説明では6歳の子供はわからないでしょう…
「配列から、インデックスを指定して要素を取り出すには、objectAtIndexメソッドを用います。配列のインデックスがその引数です。」
[recipes objectAtIndex:インデックス]
この場合、インデックスとはindexPath.rowのことだそうです。つまり
recipes objectAtIndex:indexPath.row]となると。
うーんわかるけど、インデックスってなんだっけ?
インデックス…日本語では「索引」、「見出し」など。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
http://e-words.jp/w/E382A4E383B3E38387E38383E382AFE382B9.html
プログラミングでは、配列の要素を区別・指定するための通し番号をインデックス(添字)という。
データベースや検索エンジンでは、テーブルなどに格納されたデータをすばやく検索・抽出するための識別データ・索引データなどのことをインデックスという。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
うーん、つまりデータ検索するための付箋みたいなデータってことかな?
すっきりしないけど、まあ今はこのぐらいの知識で次ぎ行きます〜
さいしょのさ1
今日はわたしがプログラミングをはじめるにあたって
すごくわかりやすかった本を紹介します。
objective-cどころかプログラミング経験が全くないよ!
という方に是非おすすめの本です。
その名も「ゼロから5日でiPhoneアプリが作れる本」!!
売り文句的には「小学生もわかる〜」とあります。
本の中には生徒くんと先生がでてきますが、
小学生らしく先生にときどきタメ語で話しかけるのが私的にはツボです。
これ売ってるんですかね?
わたしは知り合いの方から借りたのですが(日経の雑誌についてきたらしい)、もし手に取る機会があったら読んでみて下さいね〜。
残念ながらXcodeについてはバージョンが古くて、あまり役に立たないんですが
前半でプログラミングのことをわかりやすく説明してくれます。
ほんとうに初歩から!
では、経験0の方でもわかる内容をちょっとご紹介しましょかね。
プログラミング用語の解説ですよ〜。
プログラミングとは、コンピュータに「あれやって、これやって」と指示をだして
最終的には一般の人に価値があるサービスを作ることですよね。
コンピュータに指示をだすこと、つまりプログラマーは「命令」します。
例えば「画面に表示しろ」とか。
c言語やJavaではこの命令を「関数」といい、Objective-Cでは「メソッド」という。
命令=メソッド(関数)
そして何を表示しろの「何を」(目的語)のとこを「引数」(ひきすう)っていう。
何を(目的語)=引数
プログラムは基本的に命令と引数の組み合わせで書いていくんだけど、こんな感じ。
命令の種類(引数);
命令の種類(引数1, 引数2);
〜しろ(何を); って感じかね。
関数は自動販売機みたいなもんだと思えばいい。
自動販売機にお金を入れるとジュースが出てくる。
そんなふうに関数(メソッド)に引数をいれると「戻り値」っていうものが出てくる。
ジュースが戻り値ね。
Objective-Cでは上に書いたのと違った記述の仕方もある。
[ オブジェクト名 命令:引数 ] ;
つまり
[ オブジェクト名 メソッド:引数 ] ;
Objective-Cのオブジェクト指向では、命令はなんらかのオブジェクトに対して行うので、上のようにオブジェクト名を指名する。
オブジェクト指向はまあ、ポ○モンみたいなもの?
色んな種類のポ○モンがいて
みんな覚えてる技が違うから、使うポ○モンを選ばなきゃいけない。
「空を飛ぶ」を使いたかったら、飛行タイプに頼まなきゃいけない。
イメージ的にはこんな感じです。
続きの紹介はまたあとで!
初期化と初期値
初期化と初期値って良く聞くけど、わたしちゃんと調べたことなかったのだ!
なんとなくではなくて、このさいちゃんと調べておこう〜!
【初期化とは】
「変数宣言」にて「int = 100;」のように値を格納すること。
(by http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000061.html)
変数の宣言と”同時”に値を格納することで、
「最初か有効な値が入っている状態」にする。
これが「初期化」。
例)int i=100;
初期化=変数宣言+値の格納 ってことかね。
【初期値とは】
初期化の時に格納する値のこと。
一番最初に設定される値のこと。(by http://wa3.i-3-i.info/word1184.html)
上の例だと100が初期値!…まあこれは数字だからわかりやすいよね。
allocとinit
今日のはてな
UIImageView *view = [[UIImageView alloc] initWithImage:image];
このちょくちょく出てくるallocとinitとはなんぞや?
ではさっそく調べてみましょう。
【alloc】
allocateの略。
allocateは「割り当てる」という意味の単語。
allocはメソッド(動詞・指示)です。
何をするメソッドかというとインスタンス化を行うメソッドです。
(by: http://www.objectivec-iphone.com/introduction/method/class.html)
【init】
Initializeの略。
Initializeは「初期化する」という意味の単語。
Initial(イニシャル)は「最初の」っていう意味とかあるもんね。ふむ。
またinitもメソッド(動詞・指示)です。
役割はそのまんま、初期化をするメソッド!なんだ簡単!
が、しかし。
単語の意味が分かっても文法がよくわかんない!ってことで、さらに調べていきます。
もともとの手順はこんな流れらしい。
1)変数を宣言 → クラス名 = * 変数
2)インスタンスの生成 → 変数 = [クラス名 alloc];
3)インスタンスの初期化 → 変数 = [インスタンス init];
例)
1) NSDate = *today
2) today = [NSDate alloc];
3) today = [today init];
で、こんな3つも書かなきゃいけないのはめんどくさい!
が、なんと2)と3)は実は短縮できるだとさ!
2も3も [ ] がついてるよね。
この [ ] 入れ子にすることが出来るんだって!つまり…
短縮系)インスタンスの生成と初期化 → [[オブジェクト メソッド1] メソッド2];
例) today = [[NSDate alloc] init];
2と3が一行で済んじゃった。
3のインスタンス部分に2の生成式を代入する感じかね!
(by: http://www.olein.net/study/20120719160000/)
つまり、はてな発生の時点で私はこの短縮系を見せられたと。
しかもさらになんかごちゃごちゃついてるものを!
そりゃあ訳わかんないよ〜。
さらに、どうやらこのプロセスには元々newというメソッドが使われていたそうです。
でもそれだと細かな設定が出来なかったり、色々不都合があったので上記のallocとinitに分けて使われるようになったそうな。
(by: http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new)
なるほど。元々ひとつのメソッドだったのでallocとinitはセット!双子!
ひよこの私的には
なんでインスタンスは初期化しないといけないの?
なんか不都合があるの?
とか、さらなるハテナが浮かんできますが今日はタイムアウトなのでここまで。(毎回なんですが、謎が謎を呼ぶこの勉強。。。)
また時間があったら調べてみることにします。
このブログについて
はろー、Nanaです。
色々あってiOS開発を勉強することにした私。
このブログは、そんなビギナー・Nana自分自身のために書いていきます。
見直しやまとめって大事だよね。
わたしがどれぐらいビギナーかというと、
二十数年間PCクラッシャーの称号を胸に讃え、webのお仕事とはまったく関係のない学生生活を送っておりました。
難しそうだし、なんだか敷居の高そうな業界だと考えておりました。
でも人って変わるんですね。
自分が一番驚いてるんですが、
人生観の変化や色んな人との出会いでweb業界の可能性と、私自身が感じる楽しさに気がついたのです。
知識は0ならこれから学べば良い。大変なんだったら納得するまでやればいい。
学び続ける限り人は歳をとらないし、生きていけると思っております。
欲を言えば、こんな未熟者のNanaが這いつくばって勉強している姿を笑ってもらって
私のように開発やりたいけどなんか難しそうって思っている方に励みになればいいな思います。
これからやろうと思ってる経験0の方も、よければ一緒に腐海の森を彷徨いませんか。
お題はわたしの疑問から始まります。
ネットの情報・本の情報をソースに、わたしが調べてまとめていきます。
ほとんどは自分自身に向けたメモのような内容になるかもしれません。
よって知識の順序やトピックがめちゃくちゃかもしれません。
将来的にコンテンツが増えたら、まとめられるといいな。
内容について、わかりやすい解説やもっといい解を知っている方は、
ぜひぜひアイディアをシェアしてくださいませ。
また言葉使いや書き方はその都度のテンションによって違うかもしれませんが、どうぞご容赦下さい。
ではNanaでした。