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

时间:2015-08-30 12:45:00

标签: xcode swift cocoa nsview

我有一个自定义的NSView类,如下所示:

UITest

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

我该怎么做?

2 个答案:

答案 0 :(得分:8)

试试这个;

       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
            }
        }

答案 1 :(得分:1)

如果您为颜色指定默认值,则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 Initialization and the Pain of Optionals,其中讨论了这些解决方案:

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