Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

344
Vistas
Errores de Swift usando #if, #endif

Usar #if, #endif en Swift (usando Xcode) produce errores si interfiere en el flujo de una operación. Esta captura de pantalla lo dice todo:

Error rápido #if, #endif

¿Alguien sabe una solución para hacer que este ejemplo funcione, sin repetir el bloque de código completo dos veces? Fácilmente puede haber situaciones en las que todo el bloque puede ser muy grande.

EDITAR: Mi muestra era demasiado simple. Aquí hay una nueva muestra donde el "else if" depende de la misma definición (DEBUG). El "else if" también debe estar dentro de #if y #endif. Y otras muestras pueden ser mucho más complejas que esta.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Idealmente, limite el uso de #if tanto como sea posible. El uso de directivas de preprocesador siempre huele un poco a código. En este caso, simplemente puede usar una variable booleana:

 #if DEBUG let debug = true #else let debug = false #endif

Entonces simplemente usa la variable:

 var a = 0 var b = 0 ... else if debug && a == b { }

En el modo de lanzamiento, el código se volverá inalcanzable y el optimizador lo eliminará de todos modos.

Con un poco de imaginación, podemos encontrar otras soluciones, por ejemplo, podemos mover el cheque a una función:

 func isDebugCheck(a: Int, b: Int) -> Bool { #if DEBUG return a == b #else return false #endif }

o podemos mover todo el código a una función separada y reemplazar if-else por un return (o continue , según sus necesidades), por ejemplo:

 if a == 7 { ... return } #if DEBUG if a == b { return } #endif if ...
over 4 years ago · Santiago Trujillo Denunciar

0

Como señala @ user28434, no hay un preprocesador de nivel de fuente. Esto ha eliminado muchos problemas complicados del preprocesador en C (como la extraña necesidad de paréntesis para que las cosas funcionen).

Sin embargo, #if está bien integrado en el lenguaje y admite específicamente el switch para este tipo de casos.

 var a = 0 #if DEBUG let b = 0 #endif switch a { case 7: a += 1 #if DEBUG case b: a += 2 #endif case 5: a += 3 default: break }
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente puede lograr este caso con el siguiente código:

 if a == b { #if DEBUG a += 2 #else a += 1 #endif } else if a == c { a += 3 }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda