2016-07-13 12 views

Antwort

2

Nach den documentation, gibt es keinen spezifischen #error Makro. Es ist jedoch möglich, das Programm zu kompilieren.

Der Weg, dies zu tun, ist die Variable zu definieren, die Sie innerhalb der # if/# endif-Klausel verwenden werden. Wenn keine Klausel übereinstimmt, ist die Variable nicht definiert und das Programm wird nicht kompiliert.

Die Behebung eines Fehlers an der Fehlerstelle ist mit Workarounds möglich. Eingabe einer einfachen Zeichenfolge in der #else-Klausel, die einen Syntaxfehler generiert. Die Verwendung von @available generiert eine Compiler-Warnung.

#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 tat Überprüfung Kompilierung-Fehlerbehandlung ist so swifty in 'swift'! :) Danke für die Antwort. Wird eine Weile warten, vielleicht gibt es eine elegantere Herangehensweise. – brigadir

0

Die Hauptidee von #error verursacht einen Kompilierungsfehler, wenn etwas fehlt, so schnell eine ähnliche Präprozessoranweisung hat noch nicht, nur die Kompilierung-Fehler erzwingen, wie dieser Code.

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

Denken Sie daran, dass C/C++ wird die Syntax von nicht passenden Blöcke nicht überprüfen, aber Swift wird, so ist dies der Grund, warum ich eher eine Funktion aufrufen, bin als nur eine Nachricht zu schreiben.

Eine weitere Option ist Ihren eigenen Tag zum Erzeugen des Fehlers verwenden und es vor seiner Zusammenstellung, wie das, was dieser Typ here