[swift-evolution] Proposal: Allow @objc(name) on enum declarations

Kevin Ballard kevin at sb.org
Fri Dec 11 15:19:38 CST 2015


I've now submitted this proposal as a PR: https://github.com/apple/swift-evolution/pull/50

I listed one open question:

Should the generated Obj-C declarations use the swift_name attribute to indicate the Swift type it came from? Proposal SE-0005 generalizes swift_name to apply to any arbitrary C or Obj-C entity, so it will be legal to put on enums.

Labelling it makes it clear to the reader what the Swift equivalent is, but I'm unsure if there's any downsides to doing this.

-Kevin Ballard

On Thu, Dec 10, 2015, at 09:45 PM, Chris Lattner wrote:
> 
> > On Dec 9, 2015, at 3:18 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org> wrote:
> > 
> > Swift allows for placing @objc on an enum that has an Int raw type in order to expose it to Obj-C. But it doesn't currently let you rename the enum when exposing it to Obj-C. This is particularly problematic when exposing a Swift enum that's nested in a struct/class, as the nesting resolves ambiguity in Swift but is not present in Obj-C.
> 
> +1 to this idea.
> 
> -Chris
> 
> 
> > 
> > Example:
> > 
> > import Foundation
> > 
> > class Foo: NSObject {
> >    @objc enum Bar: Int {
> >        case One, Two
> >    }
> > }
> > 
> > This generates the following:
> > 
> > SWIFT_CLASS("_TtC7unnamed3Foo")
> > @interface Foo : NSObject
> > - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
> > @end
> > 
> > typedef SWIFT_ENUM(NSInteger, Bar) {
> >  BarOne = 0,
> >  BarTwo = 1,
> > };
> > 
> > I'd like to resolve this by saying @objc(FooBar) but that emits an error.
> > 
> > I'm also going to submit a separate proposal saying we should change the default naming here so the enum is named FooBar, but these two proposals go hand-in-hand (there are cases where you might want to rename a root-level enum, to add a prefix for disambiguation in Obj-C, or you may want to selectively opt out of the proposed renaming rules by forcing your nested enum to use just its name in Obj-C).
> > 
> > -Kevin Ballard
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> 


More information about the swift-evolution mailing list