2016-03-21 8 views
1

Ich versuche, PDF-Dateien zu analysieren, und ich habe fast den Code funktioniert. Das einzige, was ich nicht herausfinden kann, ist, den folgenden Objective-C-Code in Swift zu übersetzen. Ich muss meine eigene geschriebene Funktion aufrufen, um sie als Rückruf zu registrieren.Wie ich ein CGPDFOperatorTableSetCallback in SWIFT (nicht Objective C) einrichten

Der Objective-C-Code ist:

CGPDFOperatorTableSetCallback(operatorTable, "q", &op_q); 

und die Funktion ist

static void op_q(CGPDFScannerRef s, void *info) { 
    // Do whatever you have to do in here 
    // info is whatever you passed to CGPDFScannerCreate 
} 

Was würde der Swift-Äquivalente sein?

Antwort

0

Sie benötigen keine eigene op_q Funktion zu erstellen, die als Funktionszeiger verwenden, wenn Sie nicht wollen. Verwenden Swift Schließung Syntax:

CGPDFOperatorTableSetCallback(operatorTable, ("q" as NSString).UTF8String) { (s, info) -> Void in 
    // ... 
} 

Hier ("q" as NSString).UTF8String Sie ein UsafePointer<Int8> gibt, die wirkt wie ein const char * zu Swift von C. überbrückte

Wenn Sie einen Funktionszeiger verwenden wollte, könnte es so aussehen:

func op_q(s: CGPDFScannerRef, _ info: UnsafeMutablePointer<Void>) { 
    // ... 
} 
+0

dies funktioniert nicht. –

+0

@cenkebret Kannst du ein bisschen mehr darüber erzählen, was nicht funktioniert? Kommt der Rückruf nicht einmal in die Schließung? Vielleicht stellen Sie eine neue Frage und verlinken Sie hier, um den Kontext zu beschreiben. – JAL

+0

es eintritt, aber info param ist immer Null –