Darstellen von NULL Funktionszeigern zu C Funktionen in Swift

8

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:

%Vor%

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):

%Vor%

Wie stelle ich einen NULL Funktionszeiger auf (void *) oder (void(*)(const char *, unsigned, BOOL)) / (UnsafePointer<Int8>, UInt32, Bool) -> Void in Swift dar?

    
JAL 28.04.2016, 13:52
quelle

1 Antwort

5

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:

%Vor%

Ausgabe:

%Vor%     
Martin R 28.04.2016, 14:14
quelle