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

342
Views
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 answers
Answer question

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 Report

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 Report

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 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!