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.