2016-07-13 50 views

risposta

2

Secondo il documentation, non v'è alcuna macro #Error specifica. Tuttavia è possibile al programma dalla compilazione.

Il modo per farlo è definire la variabile che si utilizzerà all'interno della clausola # if/# endif. Se nessuna clausola corrisponde, la variabile sarà indefinita e il programma non verrà compilato.

L'aumento di un errore nel sito di errore è possibile con soluzioni alternative. Inserimento di una stringa semplice nella clausola #else, che genererà un errore di sintassi. L'utilizzo di @available genererà un avviso del compilatore.

#if CONFIG1 
    let config = // Create config 1 
#elseif CONFIG2 
    let config = // Create config 2 
#else 
    // Compilation fails due to config variable undefined errors elsewhere in the program. 

    // Explicit syntax error to describe the scenario. 
    Config not specified. 

    // This generates a compiler warning. 
    @available(iOS, deprecated=1.0, message="Config not defined") 
#endif 

// Use config here, e.g. 
let foo = config["fooSize"] 
+0

Oh, a tempo di compilazione gestione degli errori è così swifty in 'swift'! :) Grazie per la risposta. Aspetterò un po ', forse c'è un approccio più elegante. – brigadir

0

L'idea principale di #error sta causando un errore di compilazione quando manca qualcosa, quanto più rapido non ha ancora una dichiarazione preprocessore simile, basta forzare l'errore di compilazione, come questo codice.

#if CONFIG1 
... 
#elseif CONFIG2 
... 
#else 
    fatalError("CONFIG not defined") 
    callingANonExistingFunctionForBreakingTheCompilation() 
#endif 

Ricordate che C/C++ non si verifica la sintassi dei blocchi non corrispondenti, ma Swift, quindi questo è il motivo per cui sto chiamando una funzione piuttosto che solo la scrittura di un messaggio.

Un'altra opzione è quella di utilizzare il proprio tag per generare l'errore e il controllo prima della sua compilazione, come quello che questo ragazzo ha fatto here