As the IB compiler is able to compile xib into nib without knowledge of the 
actual code, I hardly see how it would guess that a class named Foo in Module 
Bar should now be compiled as Foo and no longer be mangled as Bar.Foo.

Maybe that issue can be mitigated by allowing a @objc(Bar.Foo) annotation and 
use it when migrating existing code.

> Le 28 juin 2016 à 06:56, Charlie Monroe via swift-evolution 
> <[email protected]> a écrit :
> 
> Do you know how would this affect e.g. XIB files or CoreData models where you 
> have the class name + module? If the class was previously marked @objc and 
> now it would be implicitely @objc(ClassName), would it require all XIB files 
> to be updated, or would the XIB compiler be able to deal with it? If the 
> former, than it's a big no for me.
> 
> I'm not a big fan of a change on any account either, though, since it's 
> absolutely not clear that @objc would have this side-effect.
> 
>> On Jun 27, 2016, at 10:26 PM, Jordan Rose via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> Hey, all. An engineer at Apple noticed the following behavior:
>> 
>> 1. class Foo: NSObject → exposed to Objective-C, Swift-style (mangled) 
>> runtime name
>> 2. @objc class Foo: NSObject → exposed to Objective-C, Swift-style (mangled) 
>> runtime name
>> 3. @objc(Foo) class Foo: NSObject → exposed to Objective-C, unmangled 
>> runtime name
>> 
>> (and 4. @objc class Foo → illegal, classes must have ObjC heritage to be 
>> @objc.)
>> 
>> They specifically observed that (1) and (2) have the same behavior, and 
>> suggested that maybe (2) should be shorthand for (3).
>> 
>> Pros:
>> - There aren't two ways to spell (1).
>> - Removing the mangling (and module uniquing) from the runtime name is 
>> probably one of the most common uses of @objc on a class.
>> 
>> Cons:
>> - It's a source-breaking change, for all that the "@objc" in (2) is 
>> redundant.
>> - For protocols, (1) and (2) are not equivalent, because @objc isn't 
>> inherited there.
>> - Mangling is used to namespace class names at run time; if you drop that, 
>> the ObjC name should probably have a prefix. (This applies more to 
>> frameworks than apps, though.)
>> 
>> There are probably people who say that last con applies to the generated 
>> header as well: we shouldn't put (1) or (2) into the generated header 
>> because the ObjC name might conflict with another class at compile time. 
>> This is valid, but probably too drastic a change at this point.
>> 
>> So, what does everyone think? I'm leaning towards "no change" because it's a 
>> bit subtle and not a big enough win, but if there's widespread support for 
>> this I'll pull it into a proposal.
>> 
>> Jordan
>> 
>> P.S. This is rdar://problem/22296436 <rdar://problem/22296436> for anyone 
>> else at Apple.
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to