\
2014年07月14日
Posted by 屋台ブルー at 2014年07月14日00:00 Comment(0)

Swiftで遊ぼう! - 6 セッター、ゲッター、何のコッチャー

swift_logo2014年9月25日
The Swift Programming Language本が改訂されたのと、シンタクスの使い方もすっかり忘れてしまったため2度目の精読をしているところ。プロパティの説明で、重要な話題は、コンピューテッド・プロパティ、さて、以前は「計算プロパティ」と説明していたけど、どうなんでしょうか? まあ、計算プロパティにしときましょうか? 過去の記述を修正するのに手間がかかるんですよね。

さて、プログラミングの勉強は捗っていますか?色々と覚えなきゃいけない、というかコーディングに使えるようにするためにシンタックスをしっかりと覚えなければならないですよね。以前少し説明を加えたコンピューテッド・プロパティ(計算プロパティ)の理解をするために、知っておかなければならない項目をリストアップしておく。

1) 値保持プロパティはクラスと構造体しか持つことができないけど、計算プロパティはクラス、構造体、そしてイーナムで持つことができる。なぜでしょう。計算プロパティは基本的に値を持つことができないということは、必ず値保持プロパティを持たなければならず、その値を使って新しい値を示すプロパティだ。

2) 計算プロパティで取り込むだけの「読み込みのみの計算プロパティ」の場合は、「get」も省略できる。しかし、必ず「return」を明示して計算プロパティだということを〆差無ければならない。これを忘れてしまいますね。注意が必用。

3) 計算プロパティに値を代入したいときは、必ず「get」と「set」の組み合わせを使う必要がある。「set」は、引数を指定してやることもできるが、省略すれば「newValuse」を使用することになる。これは下の記事に説明

-----
理解できない概念が続くと、一気に勉強をするモチベーションが下がってしまう。前回に引き続き、プロパティーのお話。

具体的な値が指定されるStored propertiesは、まだ何となく理解できる。覚えるしかないが、classとstructureしか扱うことがきないらしい。今日はComputed propertiesだけど、enumerationでも扱える、計算しきって事になる。これにはセッターとゲッターという概念が必要になる。なんじゃそりゃ

どやどやどやっとサンプルコードが並んでいた。

struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}

}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// prints "square.origin is now at (10.0, 10.0)
抜粋:: Apple Inc. “The Swift Programming Language”。 iBooks. https://itun.es/jp/jEUH0.l

Rectっていうストラクチャは、3つのプロパティで構成されている。けど、3つ目のcenterってプロパティはcomputed propertiesなんで、これは、呼ばれるまで何もしないということなんだろう。

まず、Rectのインスタンスを生成するため
var square = Rect(origin: Poin(x: 0.0, y: 0.0), size: Size(width: 0.0, height: 0.0)
と宣言している。これややこしいけど、インスタンスを生成した時に値を保持するvalued propertiresには初期値を入れてやらないといけない作業ですよね。しかしこの時点で、centerは何もしていない。というか、centerは値が保持されていないので、何も起こらないのだ。

じゃあ、このプロパティはどうやって動かせばいいのか。使い方はsquare.centerってセンテンスを書き込むだけだろう。square.centerって書き込むと、何が起こるのか? ここでゲッターが作業を始めるってことになる。ややこしいのが、centerってプロパティがPointの変数になっているので頭が混乱しそうになるね。だって、Pointは2つのvalued propertiesを持つstructureとして宣言されているが、ここで、computed propertiesとして再び宣言されている。挙動が変わっているので初心者には理解しにくい。しかし、よく見ると、getでこの2つのプロパティを取り込んで、変化をつけてcenterという新しいインスタンスを生成させていることになる。もし仮に、getだけ使用したプロパティ生成なら、getを書かずreturenで返す式にした方が理解しやすいかもしれない。

var origin = Point()
var size = Size()
var center: Point {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}

さて、セッターは値を放り込むと、もともとのRectインスタンスの内容を替えてしまえるといった動きを与える。
ここで明示的に因数として値を入れなさいよ、って感じでset(newCenter)と書かれているけど、初心者の人間にしてみれば、このnewCenterってなんだ? ということになる。newCenterはPointのインスタンスということはわかるが、宣言する必要はないのだろうか? set(newCenter: Poin)のようなイメージが頭に浮かぶが、間違いです。さらに、このnewCenterも省略できるんだそうだ。こういう値は初期設定としてnewValueを使えばいいという。なんとなく解る程度で、なるほど! と納得できないというのは歳を取って頭が硬くなったせいでしょう。まだまだプロパティの理解は続きます。


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 6 セッター、ゲッター、何のコッチャー
    コメント(0)