UIViewでUI部品の初期化処理をSwift2でおこなう

initだと落ちちゃうからね







以下のコメント欄でいろいろ議論されています
http://qiita.com/codelynx/items/f0243d631f2448e89026



/** 一つのテキストフィールドを持つシンプルなUI部品 */
class CustomView: UIView {

    @IBOutlet weak textField: UITextField!
    
    /* fatal error: unexpectedly found nil while unwrapping an Optional value が発生する。
       というかまだこの時点ではtextFieldはnilになっている
    init() {
        super.init(frame: CGRectZero)
        textField.text = "init value"
    }
    
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        textField.text = "init value"
    }
    */
    
    /** 初回のみ呼ばれる 初期化処理 */
    private lazy var initialize: (()->())? = {
     
        textField.text = "init value"
        
        // initializeを無効化
        self.initialize = nil
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        initialize?()
    }

}


self.initialize = nil が個人的には初見で一番わかりやすいかなあ?
最終案のreturn {} と return nil はObjective-C から来て初めて見る場合とかだと厳しい気がする


Swiftのバージョン上がったら使えなくなったりしないよね?

2016年8月25日木曜日