繁体   English   中英

为Swift中的自定义NSView提供指定的初始化程序

[英]providing a designated initializer for a custom NSView in Swift

我有一个自定义NSView类,看起来像:

class MyClass: NSView
{
    var myClassVar: NSColor
}

当然,Xcode抱怨我的类没有初始化器,所以我需要覆盖指定的初始化器,以便初始化myClassVar。

我怎样才能做到这一点?

尝试这个;

       class MyClass: NSView
        {
            var myClassVar: NSColor! // the optional mark ! to be noticed.

            override init(frame frameRect: NSRect) {
                super.init(frame:frameRect);
            }

            required init(coder: NSCoder) {
                 super.init(coder: coder)
            }

            //or customized constructor/ init
            init(frame frameRect: NSRect, otherInfo:Int) {
                super.init(frame:frameRect);
                // other code
            }
        }

如果为颜色指定默认值,则NSView的初始化程序仍然有效。

以下是几种方法:

var myClassVar: NSColor?
var myClassVar: NSColor! // make sure to set this before you actually access it
var myClassVar: NSColor = NSColor.clearColor()

第二个例子(隐式解包可选)是Apple对IBOutlets的处理。 否则,您需要一个初始化程序,将每个变量设置为init方法中的非null值。

有关此内容的更多信息,请参阅Swift初始化和Option of Painals ,其中讨论了以下解决方案:

  • 在调用super.init之前实例化它。
  • 可选变量( NSColor? ),在super.init之后实例化它
  • 隐式解包的可选变量( NSColor!
  • 使用懒惰的财产
  • 使用带闭合的惰性属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM