> On 14 Dec 2015, at 10:27, Roland King <r...@rols.org> wrote:
> 
> 
>> On 14 Dec 2015, at 17:12, dangerwillrobinsondan...@gmail.com wrote:
>> 
>> The bug should be that it gives you a wrong message, because it already 
>> conforms to the protocol because it inherits from a class that conforms to 
>> the protocol. 
>> 
>> All you should have to do is implement an override of the methods to do 
>> custom stuff or of the properties. 
>> You shouldn't declare conformity to NSValidatedUserInterfaceItem because it 
>> already confirms earlier in its ancestry. 
>> 
> 
> Nope. That’s wrong for 2 reasons. 
> 
> Firstly although NSControl does have the methods on it to conform to the 
> protocol in Objective C, it doesn’t actually declare that it conforms to the 
> protocol anywhere so you don’t get the actual conformance from the bridge 
> over to Swift. Its conformance is informal, not formal. 
> 
> Secondly, the methods on NSControl which implement tag and action are 
> properties in Objective C, not methods. In objective C that doesn’t matter as 
> properties just end up being two methods and the getter method in that case 
> has the right signature for the protocol so, in objective C, you can subclass 
> from any subclass of NSControl, declare protocol conformance at that point, 
> and it works. Swift however imports the properties as properties, not a pair 
> of class functions and properties do not make a class conform to a protocol 
> which requires functions, which the protocol in this instance does. Neither 
> can you override the property with a same-named method, so you can’t do it. 
> 
> I did ask earlier if Luc can declare the conformance in objective-C, 
> literally by making an NSValidatedButton subclass of NSButton which does 
> nothing but formally declare the protocol conformance and then use that in 
> swift. My thinking there is that the formal conformance to the protocol in 
> objc will mean the object is correctly tagged in swift as already conforming. 
> I don’t see another way to do it. 


I tried what you suggested and made a button subclass and just declared 
conformance in objective-c, and then imported the class into Swift.
This seems to do the trick, my button subclass is now accepted as conforming to 
the protocol.
Thanks!

-- 
Luc Van Bogaert


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to