877 Stimmen

#ifdef Ersatz in der Swift-Sprache

In C/C++/Objective C können Sie mit Compiler-Präprozessoren ein Makro definieren. Außerdem können Sie mit Compiler-Präprozessoren einige Teile des Codes ein- oder ausschließen.

#ifdef DEBUG
    // Nur im Debug-Modus
#endif

Gibt es eine ähnliche Lösung in Swift?

4voto

Adam Smaka Punkte 5237
func inDebugBuilds(_ code: () -> Void) {
    assert({ code(); return true }())
}

Quelle

2voto

Warren Stringer Punkte 1519

Dies baut auf Jon Willis's Antwort auf, die auf assert beruht, das nur in Debug-Kompilationen ausgeführt wird:

func Log(_ str: String) { 
    assert(DebugLog(str)) 
}
func DebugLog(_ str: String) -> Bool { 
    print(str) 
    return true
}

Mein Anwendungsfall ist für das Protokollieren von Druckausgaben. Hier ist ein Benchmark für die Release-Version auf dem iPhone X:

let iterationen = 100_000_000
let zeit1 = CFAbsoluteTimeGetCurrent()
for i in 0 ..< iterationen {
    Log (" unarchiveArray:\(fileName) memoryTime:\(memoryTime) count:\(array.count)")
}
var zeit2 = CFAbsoluteTimeGetCurrent()
print ("Log: \(zeit2-zeit1)" )

gibt aus:

Log: 0.0

Sieht so aus, als ob Swift 4 den Funktionsaufruf vollständig eliminiert.

0voto

Skron31 Punkte 11

Swift 5 Update für matts Antwort

let dic = ProcessInfo.processInfo.environment
if dic["TRIPLE"] != nil {
// ... machen Sie hier Ihren geheimen Bereich ...
}

0voto

devdchaudhary Punkte 596

Sie können ein enum wie folgt namens AppConfiguration erstellen, um Ihre Rohwerte typsicher zu machen.

enum AppConfiguration: String {

    case debug
    case release

}

das in einer statischen Variable platzieren

struct Constants {

    static var appConfiguration: AppConfiguration {

        #if DEBUG
        return .debug
        #else
        return .release
        #endif

    }

}

welches Sie dann in Ihrem gesamten Projekt verwenden können, wie folgt -

if Constants.appConfiguration == .debug {

print("debug")

} else {

print("release")

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X