前回つまずいた点を忘れないようにメモしておきます。
まず、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)のプロパティを初期化しなければならないのかは、まだよくわかっていません![]()