我尝试创建一个子类os 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,没有编码器。
答案 0 :(得分:2)
init(views:)
是一个便利初始化程序。
NSStackView
没有声明任何指定的初始值设定项,因此它会从超类NSView
继承它们,该超类具有init(frame:)
和init(coder:)
您可以使用初始化程序调用{{1}}或将初始值设定项声明为便捷初始值设定项,然后可以调用super.init(frame:)
。
答案 1 :(得分:0)
在@Dan的帮助下,就是这样。
class C3StackView: NSStackView
{ convenience init(views: [NSView], withColor color: NSColor)
{ self.init(views: views)
// do something wich the color
}
required convenience init?(coder decoder: NSCoder)
{ fatalError("init(coder:) has not been implemented")
}
}