とを持つサブクラスinit
を作成したいとします。UIView
String
Int
単にサブクラス化する場合、Swift でこれをどのように実行しますかUIView
? カスタムinit()
関数を作成するだけで、パラメーターが String と Int の場合、「初期化子から戻る前に super.init() が呼び出されません」というメッセージが表示されます。
呼び出すと、super.init()
指定初期化子を使用する必要があると言われます。そこでは何を使用すればよいのでしょうか? フレーム バージョンですか? コーダー バージョンですか? 両方ですか? なぜですか?
ベストアンサー1
versioninit(frame:)
はデフォルトの初期化子です。インスタンス変数を初期化した後にのみ呼び出す必要があります。このビューが Nib から再構成されている場合、カスタム初期化子は呼び出されず、代わりに version が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)
}
}