objective-c enums swift
que se puede descargar aquí

objective c - Swift: Problemas al utilizar los enum declarados en Objective-C, en Swift



enums (1)

DE ACUERDO. Miré las diversas respuestas cuando escribí la pregunta y no veo la respuesta en la lista.

Esto parece un tema tan básico y fundamental que DEBO estar haciendo algo mal, pero me estoy volviendo loco (en realidad, no es un "impulso"). Más bien un putt corto) tratando de descubrir qué me estoy equivocando.

He creado un proyecto de prueba que se puede descargar aquí (proyecto pequeño).

En cualquier caso, me encontré con esto, al trabajar en la importación de un gran Objective-C SDK que escribí en Swift.

Todo funciona bien Hasta ... Intento hacer comparaciones en enumeraciones declaradas en C.

Obviamente, las citas no se convierten en enums de Swift, pero estoy teniendo problemas para descubrir cómo usarlas.

Aquí hay una muestra de lo que verá en el proyecto de prueba;

Tengo un par de archivos C que declaran enumeraciones:

#import <Foundation/Foundation.h> typedef enum { StandardEnumType_Undef = 0xFF, StandardEnumType_Value0 = 0x00, StandardEnumType_Value1 = 0x01, StandardEnumType_Value2 = 0x02 } StandardEnumType; typedef NS_ENUM ( unsigned char, AppleEnumType ) { AppleEnumType_Undef = 0xFF, AppleEnumType_Value0 = 0x00, AppleEnumType_Value1 = 0x01, AppleEnumType_Value2 = 0x02 }; StandardEnumType translateIntToEnumValue ( int inIntValue ); int translateEnumValueToInt ( StandardEnumType inValue ); AppleEnumType translateIntToAppleEnumValue ( int inIntValue ); int translateAppleEnumValueToInt ( AppleEnumType inValue );

Las funciones mencionadas hacen más o menos lo que dice en la lata. No los incluiré.

Hice el encabezado de puente y todo eso.

Estoy tratando de usarlos en la carga inicial de la aplicación Swift:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { let testStandardConst:StandardEnumType = translateIntToEnumValue ( 0 ) // Nope. // if ( testStandardConst.toRaw() == 0 ) // { // // } // This don''t work. // if ( testStandardConst == StandardEnumType_Value0 ) // { // // } // Neither does this. // if ( testStandardConst == StandardEnumType_Value0.toRaw() ) // { // // } // Not this one, either. // if ( testStandardConst.toRaw() == StandardEnumType_Value0 ) // { // // } let testAppleConst:AppleEnumType = translateIntToAppleEnumValue ( 0 ) // This don''t work. // if ( testAppleConst == AppleEnumType.AppleEnumType_Value0 ) // { // // } // Neither does this. // if ( testAppleConst == AppleEnumType.AppleEnumType_Value0.toRaw() ) // { // // } // Nor this. // if ( testAppleConst == .AppleEnumType_Value0 ) // { // // } return true }

Parece que no puedo obtener el $ # @ !! enumeraciones para comparar con cualquier Ints o cualquier otra cosa.

A menudo me siento humillado por los errores estúpidos que hago, y algunas veces los necesito para que me los indiquen, por favor, por favor, humíllenme.

¡Gracias!


Al trabajar con typedef NS_ENUM en swift, debe omitir el nombre enum en comparación y asignación, aquí cómo puede compararlo:

if ( testAppleConst == .Value0 ) { ... }

Puede leer más sobre esto en Apple do s para Swift aquí .