2015-08-30 1 views
2

У меня есть обычай NSView класс, который выглядит как:обеспечение назначенного инициализатора для настраиваемого NSView в Swift

class MyClass: NSView 
{ 
    var myClassVar: NSColor 
} 

Естественно, Xcode жалуется, что мой класс не имеет инициализаторов, так что мне нужно переопределить назначенный инициализатору поэтому я могу инициализировать myClassVar.

Как это сделать?

ответ

4

Попробуйте это;

 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

Если вы указали свой цвет по умолчанию, инициализаторы из 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.

Для получения дополнительной информации об этом см Swift Initialization and the Pain of Optionals, на котором обсуждаются эти решения:

  • Инстанцирование его перед вызовом super.init.
  • Дополнительно переменные (NSColor?), после того, как его инстанцирование super.init
  • Косвенно развернутый опционально переменного (NSColor!)
  • Используя ленивое свойство
  • Использования ленивого свойства с закрытием

 Смежные вопросы

  • Нет связанных вопросов^_^