Swift で UIView サブクラスのカスタム init を記述するにはどうすればよいですか? 質問する

Swift で UIView サブクラスのカスタム init を記述するにはどうすればよいですか? 質問する

とを持つサブクラスinitを作成したいとします。UIViewStringInt

単にサブクラス化する場合、Swift でこれをどのように実行しますかUIView? カスタムinit()関数を作成するだけで、パラメーターが String と Int の場合、「初期化子から戻る前に super.init() が呼び出されません」というメッセージが表示されます。

呼び出すと、super.init()指定初期化子を使用する必要があると言われます。そこでは何を使用すればよいのでしょうか? フレーム バージョンですか? コーダー バージョンですか? 両方ですか? なぜですか?

ベストアンサー1

versioninit(frame:)はデフォルトの初期化子です。インスタンス変数を初期化した後にのみ呼び出す必要があります。このビューが Nib から再構成されている場合、カスタム初期化子は呼び出されず、代わりに version がinit?(coder:)呼び出されます。Swift では必須の の実装が必要になったため、以下の例を更新し、変数宣言を とオプション にinit?(coder:)変更しました。この場合、後でまたは で初期化することになります。letvarawakeFromNib()

class TestView : UIView {
    var s: String?
    var i: Int?
    init(s: String, i: Int) {
        self.s = s
        self.i = i
        super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

おすすめ記事