NSStackViewのサブクラスを作成しようとしました。たとえばNSStackViewに特殊な色を付けるなどです。NSStackViewのサブクラスを作成する
これをインスタンス化するには、わかっていればinitと呼ばれるスーパークラスを呼び出す必要があります。
NSStackViewの指定されたイニシャライザはどのように検出できますか。 https://developer.apple.com/documentation/appkit/nsstackviewを見て、私が見つける唯一のイニシャライザがある:
init(views: [NSView])
が、次のコードは、「スーパークラスの指定イニシャライザを呼び出す必要があります 『NSStackView』」
class CStackView: NSStackView
{ init(views: [NSView], withColor color: NSColor)
{ super.init(views: views)
// do something wich the color
}
required init?(coder decoder: NSCoder)
{ fatalError("init(coder:) has not been implemented")
}
}
のinit(コーダでコンパイルされません。 )は、指定された初期化子のようですが、私はCStackViewをそのサブビューで、コーダーを持たずに初期化したいと思っています。
私は自分の利便初期化子を記述する場合、私はその後、(フレーム:)またはでsuper.init(コーダ:)でsuper.initを呼び出す必要があり、自分のクラスの指定イニシャライザを呼び出す必要があります。 NSStackViewsのinit(views :)を呼び出すチャンスは決してありません。あれは正しいですか? – mik
どこから知っていますか?init(views :)は便利な初期化子です(コンパイラのエラーを除く)。 – mik
独自の便利な初期化子を書くと、サブクラスが自分自身で指定された初期化子を宣言していない限り、 'self。{superclass convenience initializer} 'を呼び出すことができます。 – dan