Oh, whoops! Good catch, Martin. I guess I was working from outdated information here. The Radar I mentioned is something else; this one is <rdar://problem/28208090> Generated interface for import-as-member doesn't include context.
Jordan > On Sep 27, 2017, at 11:45, Martin R via swift-users <swift-users@swift.org> > wrote: > > Could it be that this is (just) a problem of the generated interface _view_ ? > With > > extern NSAttributedStringKey ODRolloverTokenAttributeName; > > in an Objective-C header the "Generated Interface" is displayed as > > public static let ODRolloverTokenAttributeName: NSAttributedStringKey > > as you noticed, but I can use it from Swift as > > let key = NSAttributedStringKey.ODRolloverTokenAttributeName > > so it is actually a property of NSAttributedStringKey, not a global variable. > And with > > extern NSAttributedStringKey ODRolloverTokenAttributeName > NS_SWIFT_NAME(rolloverToken); > > in the Objective-C header I can use it from Swift as > > let key = NSAttributedStringKey.rolloverToken > > So – unless I am misunderstanding something – the > ODRolloverTokenAttributeName defined in the Objective-C header file is > actually imported to Swift as an extension to NSAttributedStringKey, even if > the generated interface view in Xcode displays it as a global variable. > > Regards, Martin > > >> Am 27.09.2017 um 16:07 schrieb Marco Masser via swift-users >> <swift-users@swift.org>: >> >> Hi, >> >> Swift 4 and the macOS 10.13 SDK added a new NSAttributedStringKey type for >> the keys that NSAttributedStrings use. The keys are then defined in an >> extension of NSAttributedStringKey, essentially like this in AppKit: >> >> // AppKit/NSAttributedString.h (Objective-C) >> extern NSAttributedStringKey NSFontAttributeName; >> >> // Generated Swift Interface >> extension NSAttributedStringKey { >> public static let font: NSAttributedStringKey >> } >> >> >> How do I get my own custom NSAttributedStringKeys to be imported this way? >> When I do it like AppKit, it doesn’t seem to work: >> >> // My Objective-C header >> extern NSAttributedStringKey ODRolloverTokenAttributeName; >> >> // Generated Swift Interface >> static let ODRolloverTokenAttributeName: NSAttributedStringKey >> >> >> That is obviously not the same. I tried using the NS_SWIFT_NAME macro, but >> that results in the symbol disappearing in Swift completely: >> >> // My Objective-C header >> extern NSAttributedStringKey ODRolloverTokenAttributeName >> NS_SWIFT_NAME(NSAttributedStringKey.rolloverToken); >> >> >> I also tried to use the swift_name attribute that is used by the >> NS_SWIFT_NAME macro and that is even mentioned in SE-0044 for exactly this >> purpose, but the symbol still disappears: >> https://github.com/apple/swift-evolution/blob/master/proposals/0044-import-as-member.md#swift_name-attribute >> >> extern const NSAttributedStringKey ODRolloverTokenAttributeName >> __attribute__((swift_name("NSAttributedStringKey.rolloverToken"))); >> >> >> What works is to manually define it in an extension like this, but that’s no >> fun: >> >> // My Objective-C header >> extern NSAttributedStringKey ODRolloverTokenAttributeName >> NS_REFINED_FOR_SWIFT; >> >> extension NSAttributedStringKey { >> static let rolloverToken = >> NSAttributedStringKey(__ODRolloverTokenAttributeName.rawValue) >> } >> >> >> Is there no way to import this automatically? Was this functionality removed >> before release even though it was mentioned in SE-0044? >> >> Cheers, >> >> Marco >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users