1. ホーム
  2. ios

[解決済み] SwiftでUIViewのサブクラスのためのカスタムinitを書くには?

2022-05-03 18:13:47

質問

と言ってください。 init a UIView サブクラスで StringInt .

をサブクラス化するだけなら、Swiftではどうすればいいのでしょう? UIView ? もし私がカスタム init() 関数のパラメータがStringとIntの場合、initializerから戻る前に"super.init()が呼び出されないと表示されます"。

そして、もし私が super.init() 指定のイニシャライザーを使用しなければならないと言われました。何を使えばいいのでしょうか?フレーム版?コーダーバージョン?両方ですか?なぜですか?

解決方法は?

その init(frame:) バージョンはデフォルトのイニシャライザーです。インスタンス変数を初期化した後にのみ、これを呼び出す必要があります。このビューが Nib から再構成される場合、カスタムイニシャライザーは呼び出されず、代わりに init?(coder:) のバージョンが呼び出されます。Swift は現在、必要な init?(coder:) を変更し、以下の例を更新しました。 let 変数宣言を var と省略可能です。この場合、それらを初期化するのは awakeFromNib() または後で

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