[swift-evolution] Pitch: Import Objective-C Constants as Enums
Jeff Kelley
slaunchaman at gmail.com
Sun Jan 17 21:13:46 CST 2016
A lot of Cocoa APIs have long lists of constant values, typically NSStrings. I’d like to pitch a way to import them as enums with associated types. I can write up a full proposal if people think this is a good idea, but here’s my thinking:
Let’s take the error domains in NSError.h for a quick example. These entries in the header:
> FOUNDATION_EXPORT NSString *const NSCocoaErrorDomain;
> FOUNDATION_EXPORT NSString *const NSPOSIXErrorDomain;
> FOUNDATION_EXPORT NSString *const NSOSStatusErrorDomain;
> FOUNDATION_EXPORT NSString *const NSMachErrorDomain;
turn into this in the Swift interface:
> public let NSCocoaErrorDomain: String
> public let NSPOSIXErrorDomain: String
> public let NSOSStatusErrorDomain: String
> public let NSMachErrorDomain: String
What I’m proposing is a way to import those as an enum instead. Similar to how we mark sections of Objective-C code with NS_ASSUME_NONNULL_BEGIN, we could mark it with something like NS_CASE_LIST_BEGIN. Then, this code:
> NS_CASE_LIST_BEGIN;
>
> FOUNDATION_EXPORT NSString *const NSCocoaErrorDomain;
> FOUNDATION_EXPORT NSString *const NSPOSIXErrorDomain;
> FOUNDATION_EXPORT NSString *const NSOSStatusErrorDomain;
> FOUNDATION_EXPORT NSString *const NSMachErrorDomain;
>
> NS_CASE_LIST_END;
would be imported as follows:
> enum ErrorDomain : String {
> case Cocoa
> case POSIX
> case OSStatus
> case Mach
> }
I can think of a lot of areas in Cocoa where these APIs could make things much more type-safe in Swift. Is this a good idea? Would people use this?
Jeff Kelley
SlaunchaMan at gmail.com | @SlaunchaMan <https://twitter.com/SlaunchaMan> | jeffkelley.org <http://jeffkelley.org/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160117/15ce8a39/attachment.html>
More information about the swift-evolution
mailing list