UIView などでインスタンス単位で一度だけ実行したい初期化コードの考察 - Qiita
上記の記事を拝見して、少し変更してみました。
lazy var setup: (()->())? = {
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "panGesture:")
self.addGestureRecognizer(panGestureRecognizer)
self.setup = nil
}
lazyであってもvarには再代入が可能なので、自己を破棄するコードをsetupの最終行に仕込んでいます。
呼び出しは以下のみで、元記事のようにif分にする必要はありません。
setup?()
元記事のようにlayoutSubviewsで実行する場合は以下のようになります。
class MyView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
setup?()
}