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
 
<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

Reply via email to