Ok, sounds good to me. I have quite a bit done at this point, but it’s not 
“pretty enough” for a real PR yet. If people really want to look at the 
ugliness, 
https://github.com/rothomp3/swift-corelibs-foundation/tree/feature/NSXMLDocument
 is where it lives.

Thanks,
Robert
> On Dec 18, 2015, at 1:58 PM, Tony Parker <anthony.par...@apple.com> wrote:
> 
> Hi Robert,
> 
> There actually already is some discussion on the swift-evolution list about a 
> language feature to enable factory methods, which would help us to implement 
> these kinds of things. It is a common pattern in Foundation to return 
> subclasses from initializers (NSNull, NSPredicate are in the same boat, among 
> many others), so I’m hoping we can get that one moving along soon. If you can 
> find that thread, go ahead and reply to it with additional justification if 
> you want.
> 
> I think we should try to move forward on this as if we’ll eventually get that 
> feature. It’s pretty clear that we need it. We may need to work on other 
> parts of the implementation first until we get it.
> 
> - Tony
> 
>> On Dec 18, 2015, at 9:21 AM, Robert Stephen Thompson via swift-corelibs-dev 
>> <swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>> wrote:
>> 
>> Since I recently did a small implementation of NSXMLNode and NSXMLDocument 
>> to use in an iOS project, I decided to tackle doing the full-featured one 
>> here. It’s not that hard, doing it as a wrapper on libxml2, except I’ve run 
>> into a bit of a snag with making the semantics exactly match Darwin 
>> Foundation: you can’t return a subclass from init! This really only matters 
>> in one place, but it matters quite a bit there. The de facto designated 
>> initializer for NSXMLNode is init(kind: NSXMLNodeKind, options: Int). In 
>> pure Swift, this always returns an NSXMLNode, not the appropriate subclass! 
>> Which, of course, means as? returns nil, as! (and unsafeDowncast) crash, 
>> etc, when you end up trying to retrieve one and treat it as the subclass 
>> it’s “supposed” to be. I’m completely stumped as to any way around this. It 
>> might be that it’s just impossible to match Darwin Foundation semantics 
>> without a new language feature for this, which obviously would have to go 
>> through swift-evolution and then actually be implemented. Am I correct, or 
>> is there something I’m missing? Also, should I go ahead and implement the 
>> rest of this without the exactly matching semantics because something is 
>> better than nothing?
>> 
>> Thanks,
>> Robert Thompson
>> Software Engineer
>> WillowTree, Inc.®
>> willowtreeapps.com <http://willowtreeapps.com/>
>>  <PastedGraphic-1.png>
>> 
>> _______________________________________________
>> swift-corelibs-dev mailing list
>> swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev
> 

_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to