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