IsDebug-Konstante basierend auf aktiven Kompilierungsbedingungen
Ein weiterer, vielleicht einfacherer Lösungsansatz, der dennoch zu einem booleschen Wert führt, den Sie an Funktionen übergeben können, ohne überall in Ihrem Code #if
-Bedingungen zu verwenden, besteht darin, DEBUG
als eine Ihrer Projektbuild-Ziel Aktive Kompilierungsbedingungen
festzulegen und das folgende hinzuzufügen (ich definiere es als eine globale Konstante):
#if DEBUG
let isDebug = true
#else
let isDebug = false
#endif
isDebug-Konstante basierend auf Compiler-Optimierungseinstellungen
Dieses Konzept basiert auf kennytms Antwort
Der Hauptvorteil im Vergleich zu kennytms ist, dass hierbei keine privaten oder nicht dokumentierten Methoden verwendet werden.
In Swift 4:
let isDebug: Bool = {
var isDebug = false
// Funktion mit einem Nebeneffekt und einem booleschen Rückgabewert, den wir an assert() übergeben können
func set(debug: Bool) -> Bool {
isDebug = debug
return isDebug
}
// assert:
// "Die Bedingung wird nur in Playgrounds und -Onone-Builds ausgewertet."
// daher wird isDebug in Release-Builds nie auf true geändert
assert(set(debug: true))
return isDebug
}()
Verglichen mit Präprozessor-Makros und kennytms Antwort,
-
Sie müssen kein benutzerdefiniertes -D DEBUG
flag definieren, um es zu verwenden
-
~ Es ist tatsächlich in Bezug auf Optimierungseinstellungen definiert, nicht Xcode-Buildkonfiguration
-
Dokumentiert, was bedeutet, dass die Funktion normalen API-Veröffentlichungs-/Veraltungsmodellen folgen wird.
-
Es wird bei der Verwendung von if/else keine "Wird nie ausgeführt werden" Warnung generiert.