2014年07月29日
Posted by 屋台ブルー at
2014年07月29日00:00 Comment(0)
Swiftで遊ぼう! - 21 初期化は続く、まだ継承のない複雑なやつ
いつまでもイニシャライザーが続く。やっとDelegation(委任)タイプのイニシャライザーだ。クラスのイニシャライザーは継承という概念という機能が入るから更に複雑なようだけど、シンプルなstruct型でさえも混乱しそう。
struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
init() {}
init(origin: Point, size:Size){
self.origin = origin
self.size = size
}
init(center: Point, size:Size){
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size:size)
}
}
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
var x = centerRect.origin.x //これは2.5になってるんですよね。
このstruct型のRectには3つのタイプの初期化宣言ができる。
let centerRect = Rect()
こうしたらデフォルト型のイニシャライザーが呼ばれる。
centerRect.origin.xは0.0だよね。
2番目のイニシャライザーは、Memberwiseイニシャライザー(なんと訳せばいいのか分からない)なので引数を渡してやるといい。
ここまでのイニシャライザーしか使わないのであれば、1番目と2番目のイニシャライザーの記述はいらない。
ここで委任タイプのイニシャライザーが3番目である。
centerというPointのインスタンスを渡してoriginを指定する予定。
struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
init() {}
init(origin: Point, size:Size){
self.origin = origin
self.size = size
}
init(center: Point, size:Size){
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size:size)
}
}
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
var x = centerRect.origin.x //これは2.5になってるんですよね。
このstruct型のRectには3つのタイプの初期化宣言ができる。
let centerRect = Rect()
こうしたらデフォルト型のイニシャライザーが呼ばれる。
centerRect.origin.xは0.0だよね。
2番目のイニシャライザーは、Memberwiseイニシャライザー(なんと訳せばいいのか分からない)なので引数を渡してやるといい。
ここまでのイニシャライザーしか使わないのであれば、1番目と2番目のイニシャライザーの記述はいらない。
ここで委任タイプのイニシャライザーが3番目である。
centerというPointのインスタンスを渡してoriginを指定する予定。