[swift-users] How do you declare a custom NSAttributedStringKey in Objective-C for Swift use?
Marco Masser
lists at duckcode.com
Wed Sep 27 09:07:34 CDT 2017
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170927/42b4b7b6/attachment.html>
More information about the swift-users
mailing list