OSX
iOS
Swift

インスタンス単位で一度だけ実行したい初期化コードの考察

More than 1 year has passed since last update.

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?()
}