> On Jun 27, 2016, at 1:26 PM, Jordan Rose via swift-evolution
> <[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.)
I’m -1 on this, because bare “@objc” in other contexts means “make sure this is
exposed to Objective-C, but I don’t want to be explicit about the name” while
“@objc(something)” means “make sure this is exposed to Objective-C, and
‘something’ is the name”.
- Doug
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution