Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

352
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda