2017-10-23 6 views
0

NSStackView의 하위 클래스를 만들려고합니다. 예를 들어 NSStackView에 특수한 색상을 지정하려고합니다.NSStackView의 하위 클래스 만들기

인스턴스를 생성하려면 올바르게 이해하면 init로 지정된 수퍼 클래스를 호출해야합니다.

NSStackView의 지정된 초기화 프로그램을 어떻게 찾을 수 있습니까?

init(views: [NSView]) 

하지만 컴파일하지 않고 다음 코드는

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

초기화 (코더 '슈퍼 클래스'NSStackView '의 지정 초기화를 호출해야 ": https://developer.apple.com/documentation/appkit/nsstackview 보면 내가 찾을 수있는 유일한 초기화는 다음과 같습니다) 지정된 이니셜 라이저 것으로 보인다하지만 CBSackView 해당 코코아가없는 subviews init 싶습니다.

답변

2

init(views:)은 편의 초기화 프로그램입니다. 이 init(frame:)init(coder:)

당신은 다음 초기화 호출 super.init(frame:)이 있거나 편의를 초기화로 초기화를 선언 할 수 있습니다이 슈퍼 클래스, NSView, 그들을 상속 있도록

NSStackView는 어떤 지정된 초기화를 선언하지 않습니다 self.init(views:)이라고 부를 수 있습니다.

+0

는, 그때는 super.init (프레임 :) 또는는 super.init (코더 :)를 호출하는 내 자신의 클래스의 지정 초기화를 호출해야합니다. NSStackViews init (views :)를 호출 할 기회가 없다. 그 맞습니까? – mik

+0

여기서 알 수 있듯이, init (views :)은 편리한 초기화 프로그램입니다 (컴파일러 오류 제외). – mik

+1

자신 만의 편의 초기화 프로그램을 작성하면 하위 클래스가 자신이 지정한 초기화 프로그램을 선언하지 않은 경우'self. {superclass convenience initializer} '를 호출 할 수 있습니다. – dan

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