[swift-dev] Swift C enum Case Mapping

Jordan Rose jordan_rose at apple.com
Mon Jan 11 12:11:03 CST 2016


Right. This is because Swift can't tell if your enum is actually an option set, a true, non-overlapping enum, or just a set of related constants, so it picks the lowest common denominator. We currently don't have a great way to override that in headers you don't control.

(Heck, on non-Apple platforms we don't have a great way to do it in headers you do control; Swift is currently keying off the macro names.)

Jordan

> On Jan 10, 2016, at 13:25 , Austin Zheng via swift-dev <swift-dev at swift.org> wrote:
> 
> I spoke too soon, the cases are also defined as values of that type. So, a working version of your code:
> 
> extension fe_type : CustomStringConvertible {
>   public var description: String {
>     switch self {
>     case FE_QPSK: return "QPSK"
>     case FE_QAM: return "QAM"
>     case FE_OFDM: return "OFDM"
>     case FE_ATSC: return "ATSC"
>     default: fatalError("can't be exhaustive")
>     }
>   }
> }
> 
> Best,
> Austin
> 
>> On Jan 10, 2016, at 1:22 PM, Austin Zheng <austinzheng at gmail.com <mailto:austinzheng at gmail.com>> wrote:
>> 
>> Hi Ryan,
>> 
>> Apologies, I should have been more clear. In Xcode you can alt(?)-click on a type (e.g the 'MyType' in "let a : MyType = 123") in the IDE to pop up a little window that shows you the definition, including the type and some other information. If you're on a Linux box or not using an IDE you probably don't have that option.
>> 
>> The only methods I see exposed on the Swift imported type are initializers taking a integer raw value, and a 'rawValue' property for getting back out the raw value. Hope that helps.
>> 
>> Austin
>> 
>>> On Jan 10, 2016, at 1:18 PM, Ryan Lovelett <swift-dev at ryan.lovelett.me <mailto:swift-dev at ryan.lovelett.me>> wrote:
>>> 
>>> Austin,
>>>  
>>> I guess I should say that the `typedef` is coming from a Linux kernel header <http://lxr.free-electrons.com/source/include/linux/dvb/frontend.h?v=3.2>. So I don't think I'm going to be able to add any macros to the definition.
>>>  
>>> What do you mean about alt-click? Alt click where?
>>>  
>>> On Sun, Jan 10, 2016, at 04:12 PM, Austin Zheng wrote:
>>>> fe_type is being imported as a struct (alt-click 'fe_type' in Swift). I think if you want it to be imported as an enum you need to use the NS_ENUM macro in the definition, which might not be possible in your case.
>>>>  
>>>> Austin
>>>>  
>>>>> On Jan 10, 2016, at 1:06 PM, Ryan Lovelett via swift-dev <swift-dev at swift.org <mailto:swift-dev at swift.org>> wrote:
>>>>>  
>>>>> typedef enum fe_type {
>>>>>  FE_QPSK,
>>>>>  FE_QAM,
>>>>>  FE_OFDM,
>>>>>  FE_ATSC
>>>>> } fe_type_t;
>>>  
>> 
> 
>  _______________________________________________
> swift-dev mailing list
> swift-dev at swift.org <mailto:swift-dev at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-dev <https://lists.swift.org/mailman/listinfo/swift-dev>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160111/376aabc4/attachment.html>


More information about the swift-dev mailing list