Re: Subclassing NSWindowController in Swift
Re: Subclassing NSWindowController in Swift
- Subject: Re: Subclassing NSWindowController in Swift
- From: Rick Mann <email@hidden>
- Date: Sat, 18 Oct 2014 20:42:49 -0700
> On Oct 18, 2014, at 20:33 , Graham Cox <email@hidden> wrote:
>
> According to the latest documentation pack that arrived on Thursday, Swift has:
>
> convenience init(windowNibName windowNibName: String,
> owner owner: AnyObject)
>
> So just use this. Like C++, Swift has overloaded method names, so 'init' can take various parameter combinations.
I tried this:
16 override
17 init()
18 {
19 init(windowNibName: "foo", owner: self);
20 }
21
But I get:
/Users/rmann/Projects/XCAM/repo/XNC/trunk/XNC/CommConfig.swift:19:7: Initializers may only be declared within a type
/Users/rmann/Projects/XCAM/repo/XNC/trunk/XNC/CommConfig.swift:19:23: Expected parameter type following ':'
/Users/rmann/Projects/XCAM/repo/XNC/trunk/XNC/CommConfig.swift:19:23: Expected ',' separator
/Users/rmann/Projects/XCAM/repo/XNC/trunk/XNC/CommConfig.swift:21:1: 'required' initializer 'init(coder:)' must be provided by subclass of 'NSWindowController'
If I instead call super.init(...), I get:
/Users/rmann/Projects/XCAM/repo/XNC/trunk/XNC/CommConfig.swift:19:3: Must call a designated initializer of the superclass 'NSWindowController'
> Also, in general I think what you're saying about designated initializers is incorrect - the designated initializer MUST be called, but not necessarily by you. All it means is that the other init... methods must call it. The guideline about it being the one with the most parameters is not a rule - typically that's true but it's not a requirement and for many classes, definitely not true.
In this case, it might've solved the problem (except that I can't refer to self yet).
>
>
> --Graham
>
>
>
>
>
> On 19 Oct 2014, at 2:08 pm, Rick Mann <email@hidden> wrote:
>
>> In Obj-C, I typically subclass NSWindowController and override -init to call -initWithNibName:. I do this so the caller doesn't have to worry about how to make one of these window controllers:
>>
>> @implementation MyWindowController
>>
>> - (id) init
>> {
>> self = [super initWithWindowNibName: "MyWindow" owner: self]
>> ...
>> return self;
>> }
>>
>> I can't figure out how to do the same in Swift. NSWindowController makes initWithWindow() the only designated initializer, which I must call, which makes it seem like I can't use any of the convenience methods. Apple's own guidance on designated inititalizers is that they should be the ones that take the most parameters.
>>
>> So, I can load the nib myself, and make the window, and pass that up, but this seems broken. Is it?
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
--
Rick Mann
email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden