前回つまずいた点を忘れないようにメモしておきます。

 

まず、Swiftのバージョンによる仕様変更。

drawRect(rect: CGRect) →  draw(_ rect: CGRect) 

M_PI →  Double.pi 

 

そして前回イニシャライザでやろうとしたのは、

定数に、ビューの横幅から計算した値をセットする事でした。例えばこんなふう…

let length: CGFloat
required init?(coder decorder: NSCoder) {
  super.init(coder: decorder)
  length = self.bounds.width * 0.8
}

これはsuper.initする前に(フェイズ1で)定数を初期化してください、となります。

 

かといって、boundsは親クラスのプロパティなのでフェイズ1では参照できません。

結局、定数でやるのは無理で、

var length: CGFloat
required init?(coder decorder: NSCoder) {
  length = 0
  super.init(coder: decorder)
  length = self.bounds.width * 0.8
}

となるようです。なんじゃいな…。

 

 

「親クラスのイニシャライザはとにかくまず真っ先に呼ぶもの」と思い込んでいたので、混乱しました。

しかし、どうしてフェイズ2でなくフェイズ1で自分(self)のプロパティを初期化しなければならないのかは、まだよくわかっていませんショボーン