swift3&OSX格闘記・第3回「初期化しないメンバ変数なんて許しません」

Author:

swiftやってみると、プログラムを動かす前に確認できるバグは事前につぶしとけ、というような思想になっている感じ。
そんな仕組みが随所にあるわけですが。

C#とかなら

class Abc {
    public int a;
}
これでビルド通るんですが、swiftはこれじゃダメ。
コンストラクタで初期化させるか、デフォルトで初期化させないといけません。
class Abc extends NSObject {
    let a: Int = 0
}

こうするか、

class Abc extends NSObject {
    let a: Int
    init (z: Int) {
        a = z
    }
}

こうしましょ。

呼び出すところで保証すればいいのに、そういうわけにもいかないのがswiftの困ったところなんですよね。
最近の言語はこういうの多いみたいですが。

で、extendsしているクラスだとsuper.init呼べとか起こられるし、ある場所ではoverrideしろとか言われるし、
もともとinitがあって面倒なことが生じたりと色々厄介なのですよねえ。
ちなみにsuper.initも呼ぶ場所重要。

class MyDateTime: NSObject {
    var year: Int
    
    override init() {
        year = 2000
        super.init()
    }

}

これはOKですが、

class MyDateTime: NSObject {
    var year: Int
    
    override init() {
        super.init()
        year = 2000
    }

}

これはNG。メンバの初期化が先です。

結局のところ、Int? = nilとか書いたほうが楽、かなあ。

はじめに
第1回「ぐぐって出てくるのはどれもこれもiOS」
第2回「配列を渡すとインスタンスがコピーされた」
第3回「初期化しないメンバ変数なんて許しません」
第4回「NSStringとString、NSURLとUrl」
第5回「for文が、++が、、、」
第6回「ビルドおもーい」
第7回「do、try、catch」
第8回「swift2では動くのにswift3では動かない」
第9回「ふおおWindowsFormみたい」
第10回「Labelの値を変える」
第11回「windowControllerとViewControllerとView」
第12回「ボタンはViewController、メニューはDelegate」
第13回「TreeViewのしんどさ」
第14回「¥nマークは改行しません」
第15回「instantiateじゃ駄目ぇ」
第16回「ScrollViewの中にTextView」
第17回「ファイルをどう読み書きすればいいんじゃ」
第18回「右クリック・・・」
第19回「isIntなんて無いです」
第20回「anyはswitchでキャスト」
第21回「MessageBox.Show」
第22回「BezierはViewの中で」
第23回「512pxのアイコンを用意せよ」
第24回「アーカイブ作成」
第25回「これから始める人へ」

Facebook にシェア
Pocket