Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
Nuevas advertencias de Swift 5 para las enumeraciones de Objective-C: ¿cómo deshacerse de ellas?

A partir de Xcode 10.2, cuando uso enumeraciones que definí en Objective-C, pero en una declaración de cambio de Swift 5, recibo la siguiente advertencia, incluso si he agotado todos los valores de enumeración posibles.

 Switch covers known cases, but 'MyObjectiveCEnumName' may have additional unknown values

Xcode me dice que debo arreglar esto por

 Handle unknown values using "@unknown default"

¿Por qué sucede esto y qué puedo hacer al respecto?


Ejemplo

Enum Objective-C

 typedef NS_ENUM(NSUInteger, CardColor) { CardColorBlack, CardColorRed };

Declaración de cambio de Swift 5

 var cardColor: CardColor = .black switch (cardColor) { case .black: print("black") case .red: print("red") }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

TL;DR

Si desea que las enumeraciones de Objective-C se traten como las de Swift, ahora debe declararlas usando una macro diferente, NS_CLOSED_ENUM , en comparación con la antigua NS_ENUM . Cambiar esto hará que la advertencia desaparezca.

El ejemplo anterior se convertiría

 typedef NS_CLOSED_ENUM(NSUInteger, CardColor) { CardColorBlack, CardColorRed };

Detalles

De las notas de la versión de Swift 5 :

En el modo Swift 5, se requieren cambios en las enumeraciones que se declaran en Objective-C o que provienen de los marcos del sistema para manejar casos desconocidos, casos que podrían agregarse en el futuro o que pueden definirse de forma privada en un archivo de implementación de Objective-C. . Formalmente, Objective-C permite almacenar cualquier valor en una enumeración siempre que encaje en el tipo subyacente. Estos casos desconocidos se pueden manejar utilizando el nuevo caso predeterminado @unknown, que aún proporciona advertencias si se omite algún caso conocido del conmutador. También se pueden manejar usando un caso predeterminado normal.

Si ha definido su propia enumeración en Objective-C y no necesita clientes para manejar casos desconocidos, puede usar la macro NS_CLOSED_ENUM en lugar de NS_ENUM. El compilador de Swift reconoce esto y no requiere cambios para tener un caso predeterminado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!