TL; DR? & gt; Gehe zu 3. Lösung
Gemäß Apple-Dokumentation zu Vorverarbeitungsrichtlinien :
Der Swift-Compiler enthält keinen Präprozessor. Stattdessen dauert es Vorteil der Kompilierzeit Attribute, Build-Konfigurationen und Sprachfunktionen, um die gleiche Funktionalität zu erreichen. Dafür Grund, Präprozessordirektiven werden nicht in Swift importiert.
Deshalb haben Sie einen Fehler, wenn Sie versuchen, __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
zu verwenden, was eine C-Preprocessing-Direktive ist. Mit swift können Sie #if
nicht mit Operatoren wie <
verwenden. Alles, was Sie tun können, ist:
oder mit Bedingungen:
%Vor%Nochmals von die gleiche Dokumentation :
Build-Konfigurationen umfassen die wörtlichen wahren und falschen Werte, Befehlszeilenflags und die Plattform-Testfunktionen, die in der Tabelle unten. Sie können Befehlszeilen-Flags mithilfe von -D & lt; # flag # & gt;.
angeben
true
und false
: Wird uns nicht helfen os(iOS)
oder arch(arm64)
& gt; wird dir nicht helfen, suchte ein wenig, kann nicht herausfinden, wo sie definiert sind. (im Compiler selbst vielleicht?) Fühlt sich ein bisschen wie ein Workaround an, aber macht den Job:
Jetzt können Sie zum Beispiel #if iOSVersionMinRequired7
anstelle von __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0
verwenden, vorausgesetzt natürlich, dass Ihr Ziel iOS7 ist.
Das ist im Grunde dasselbe, als wenn Sie Ihre iOS-Implementierungszielversion in Ihrem Projekt ändern, was weniger praktisch ist ... Natürlich können Sie Multiple Build-Konfigurationen mit verwandten Schemata abhängig von Ihren iOS-Versionszielen erstellen.
Apple wird das sicherlich verbessern, vielleicht mit einer eingebauten Funktion wie os()
...
Getestet in Swift 2.2
Mit Deployment Target
meinst du iOS version
oder App Target
? Im Folgenden stelle ich die Lösung vor, wenn Sie mehrere Versionen der App haben (kostenlose App, bezahlte App, ...), so dass Sie verschiedene App-Ziele verwenden.
Sie können benutzerdefinierte Build-Konfigurationen festlegen:
1. Gehe zu deinem Projekt / wähle dein Ziel / Build Settings / suche nach Custom Flags
2. Setzen Sie für Ihr gewähltes Ziel Ihr benutzerdefiniertes Flag mit dem Präfix -D
(ohne Leerstellen) für Debug- und Release-Dateien
3. Führen Sie die obigen Schritte für jedes Ziel aus, das Sie haben
Um zwischen Zielen zu unterscheiden, können Sie Folgendes tun:
%Vor%Sie können dies in einer bedingten Kompilierungsanweisung nicht tun. "Komplexe Makros", wie Apple sie nennt, werden in Swift nicht unterstützt. Generika und Typen machen das gleiche mit besseren Ergebnissen. (Hier ist ein Link, den sie veröffentlicht haben Ссылка )
Hier ist eine Funktion, die ich entwickelt habe, die dasselbe bewirkt (und natürlich nur die Zeichenfolgen mit dem ersetzen, was für Sie nützlich ist, wie ein boolescher Befehl oder nur die Option selbst):
%Vor%Ich weiß, dass Ihre Frage schon seit einer Weile hier ist, aber für den Fall, dass jemand noch nach einer Antwort sucht, sollten sie wissen, dass Sie mit Swift 2.0 so etwas tun können:
%Vor%Sie können mehr darüber hier lesen.
Tags und Links ios swift conditional-compilation buildconfiguration deployment-target