J.log

jakeの日常

Swiftの勉強メモ3

前回の続き。

 

Swiftの勉強メモ2 - J.log

 

6章の続き……の前に「シングルトン」ってなんだろう?

・オブジェクトの生成数を制限するときに使う。

・クラスそのものにオブジェクトの数を管理することができるようになる。

・データベースへのアクセスなどに効果あり。

・(あんまりいいことではないけど)グローバル変数として使うケースも多い。

らしい。

コーディングしていくうちに必要になるんだろう、ということで一応納得した。

 

あらためて6章の続き、「6.5.2 クロージャを使ったマップ関数」から。

・マップ関数の使い道が、イマイチつかめてない。

・配列に対して一定の計算を行うとかに使えるとあるので、合計を求めるとか、合計と数値を渡すと平均値が出るとか、緯度経度を与えたら原点からの距離を求めるとかそういう感じになるんだろうか?

・……VBで似たことすると配列+ループ処理だったけど、マップ処理なら配列にデータを入れて、マップ関数に処理内容だけ記述すればOK、ってできるんかな。

・6.6は組み込み関数。リストアップされてるだけー。

・だいたいは「どっかで見たような」関数ぽい。名前も英語なので、おおよそ理解できる。

・map関数は「写像処理」って紹介されてる。ぐぐったら変換処理のこと。

→さっきの緯度経度とかの使い方であってたのか。

 

7章 列挙型

enumってVBでもあったなあ。全然使わなかったけどw

・連想値とか素値とか色々ある。

・複雑にすると、整数、数値、文字などと違うものを定義できたりする。

複数を定義しても変数へ代入する場合は1つだけ。

・使いドコロが理解しきれない。理解力と実例の情報が足りないか。

・列挙型の中にメソッドが組み込める。これは重要らしい。

・グローバル関数で同じことはできるが、他にも転用が効きすぎる。

・それを防ぐのが列挙型の中に定義するメソッド。列挙型にだけ結びつくので、他との関連を考えなくて済むのがメリットか。

・一度宣言した列挙型の変数で、自分自身へ代入して中身を変更可能にできる。変異メソッドというらしい。サンプルだとフリップフロップだった。

・ううむ、使用例がほしいな。

 

8章 クラスと構造体

Swiftだとクラスと構造体は似ている。

・それにしても「インスタンス」ってキーワードが頻繁に出てくるな、この言語。

・訂正、クラスってのは広義の定義。その中に構造体というものが存在する。似てて当然。

・クラスってのは型のこと。クッキーに使う抜き型みたいなもんで、そのクラスの変数を用意しないと使えない。テンプレート、ともなってた。それなら自分でもわかる。

・構造体は値型、クラスは参照型。

・構造体のイニシャライザ(初期化処理)はinit()という名称で固定。

・↑がない場合は構造体の定義をする際に直接変数宣言に書き込んでOK……メンバーごとのイニシャライザーが自動的に生成されるため。これは構造体だけの機能でクラスだとイニシャライザーは必ず必要。

・構造体での変数は型の指定が必須。型推論しない。

・イニシャライザーは構造体のインスタンスが生成されたタイミングで実行される。var a=Area()とかしたとき。

 ↑関数なのか構造体なのかわかりにくいなコレ。実装の時は名前で区別する工夫とか必要かも。

・イニシャライザーには引数が指定できる。初期値を外部から与えることも可能。

・構造体内のメソッドは、通常だと構造体の値を書き換えることはできない。

・書き換える場合は定義で"mutating"を頭につけて、変異メソッドとして宣言する。

・変異メソッド、第1引数がパラメータ名なし、第2引数がパラメータ名ありとなる。違和感あるけどそうしないと動かない。

・第1引数にパラメータ名をつけたままにすると、XCodeがエラーを返す。実行できない。"fix-it:Delete 〜"とパラメータ名の削除を指示してくる。

XCodeで確認するために↑のコードを入れてたけど、Swiftはスペースの有無にうるさい部分がある。C言語だとくっついてても大丈夫なところでもダメ!とエラーを返すことがある。スペース入ってたほうが見やすいし後からの修正も手間なので、あんまり横着せずに書いた方が良さそう。

 

今回はここまで。

次回は8.3 クラスから