Betrachten Sie die bisher noch nicht dokumentierten Cocoa C-Funktionen _NSLogCStringFunction()
und _NSSetLogCStringFunction()
. _NSLogCStringFunction()
gibt einen Funktionszeiger auf die C-Funktion zurück, die von der Objective-C-Laufzeit hinter den Kulissen für NSLog()
verwendet wird, und _NSSetLogCStringFunction()
ermöglicht Entwicklern, ihre eigene C-Funktion für die Protokollierung anzugeben. Weitere Informationen zu diesen beiden Funktionen finden Sie in der Stack Overflow-Frage und dieser WebObjects - Artikel .
In C kann ich einen NULL-Funktionszeiger an _NSSetLogCStringFunction()
übergeben:
Allerdings stoße ich auf einige Probleme, wenn ich versuche, dies in reinem Swift zu tun:
%Vor% Wenn ich versuche, diese Kompilierungswarnung mit unsafeBitCast
zu umgehen, stürzt mein Programm einfach mit EXC_BAD_INSTRUCTION
ab (wie erwartet, da die Signatur falsch ist):
Wie stelle ich einen NULL
Funktionszeiger auf (void *)
oder (void(*)(const char *, unsigned, BOOL))
/ (UnsafePointer<Int8>, UInt32, Bool) -> Void
in Swift dar?
Das Swift-Mapping der (Objective-) C-Deklaration
%Vor%ist
%Vor% Die einfachste Lösung wäre, das Ziel-C extern
zu setzen.
Deklaration in eine Objective-C-Headerdatei und schließt diese ein
aus dem überbrückenden Header.
Alternativ sollte in reinem Swift
sein %Vor% In beiden Fällen ist der Funktionsparameter ein implizit nicht komprimiertes optionales
und du kannst es mit nil
aufrufen. Beispiel:
Ausgabe:
%Vor%Tags und Links c swift function-pointers iphone-privateapi