Swift 创建NSStackView的子类
我尝试创建一个子类os NSStackView,例如,为它指定一种特殊的颜色 要实例化它,我必须调用一个名为init的超类,如果我理解正确的话 如何检测,哪些是指定的初始值设定项NSStackView。我找到的唯一初始值设定项是:Swift 创建NSStackView的子类,swift,macos,cocoa,initialization,Swift,Macos,Cocoa,Initialization,我尝试创建一个子类os NSStackView,例如,为它指定一种特殊的颜色 要实例化它,我必须调用一个名为init的超类,如果我理解正确的话 如何检测,哪些是指定的初始值设定项NSStackView。我找到的唯一初始值设定项是: init(views: [NSView]) 但是下面的代码不使用“必须调用超类“NSStackView”的指定初始值设定项”编译 init(coder:)似乎是一个指定的初始值设定项,但我想用它的子视图初始化CStackView,而不是使用编码器 init(视图:)
init(views: [NSView])
但是下面的代码不使用“必须调用超类“NSStackView”的指定初始值设定项”编译
init(coder:)似乎是一个指定的初始值设定项,但我想用它的子视图初始化CStackView,而不是使用编码器 init(视图:)
是一个方便的初始值设定项
NSStackView
没有声明任何指定的初始值设定项,因此它从其超类NSView
继承它们,该超类具有init(frame:)
和init(coder:)
您可以让您的初始值设定项调用super.init(frame:)
,或者将您的初始值设定项声明为方便的初始值设定项,然后它可以调用self.init(views:)
init(视图:)
是一个方便的初始值设定项
NSStackView
没有声明任何指定的初始值设定项,因此它从其超类NSView
继承它们,该超类具有init(frame:)
和init(coder:)
您可以让您的初始值设定项调用
super.init(frame:)
,或者将您的初始值设定项声明为方便的初始值设定项,然后它可以调用self.init(views:)
有@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")
}
}
有了@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")
}
}
如果我编写自己的方便初始值设定项,我必须调用自己类的指定初始值设定项,然后必须调用super.init(frame:)或super.init(coder:)。我从来没有机会调用NSStackViews init(视图:)。这是正确的吗?您从哪里知道init(views:)是一个方便的初始值设定项(除了编译器错误)。如果您编写自己的方便初始值设定项,那么它可以调用
self.{超类方便初始值设定项}
只要您的子类没有声明自己的指定初始值设定项,您就必须单击文档中的函数以查看它是否是一个方便的初始值设定项:如果我编写自己的方便初始值设定项,我必须调用自己类的指定初始值设定项,然后必须调用super.init(frame:)或super.init(coder:)。我从来没有机会调用NSStackViews init(视图:)。这是正确的吗?您从哪里知道init(views:)是一个方便的初始值设定项(除了编译器错误)。如果您编写自己的方便初始值设定项,那么它可以调用self.{超类方便初始值设定项}
只要您的子类没有声明自己的指定初始值设定项,您就必须单击文档中的函数以查看它是否是一个方便的初始值设定项: