如何在 SWIFT(不是 Objective C)中设置 CGPDFOperatorTableSetCallback [关闭]

Posted

技术标签:

【中文标题】如何在 SWIFT(不是 Objective C)中设置 CGPDFOperatorTableSetCallback [关闭]【英文标题】:How do I setup a CGPDFOperatorTableSetCallback in SWIFT (not Objective C) [closed] 【发布时间】:2016-03-21 17:50:02 【问题描述】:

我正在尝试解析 PDF 文件,并且代码几乎可以正常工作。我似乎无法弄清楚的唯一一件事是将以下目标 C 代码翻译成 Swift。我需要调用自己编写的函数将其注册为回调。

Objective-C 代码是:

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

函数是

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

Swift 的等价物是什么?

【问题讨论】:

【参考方案1】:

如果您不想,您不需要创建自己的 op_q 函数来用作函数指针。使用 Swift 的闭包语法:

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

这里("q" as NSString).UTF8String 为您提供UsafePointer<Int8>,它充当从C 桥接到Swift 的const char *

如果你想使用函数指针,它可能看起来像这样:

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

【讨论】:

这不起作用。 @cenkebret 你能详细说明什么不起作用吗?回调甚至没有进入闭包吗?也许提出一个新问题并返回此处以提供上下文。 它正在进入,但信息参数始终为零 @cenkebret 您使用的是哪种语法? Swift 闭包还是函数指针?您能提出一个新问题并发布您的完整代码吗? 我已经发布了这个问题:***.com/questions/36358521/…

以上是关于如何在 SWIFT(不是 Objective C)中设置 CGPDFOperatorTableSetCallback [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在objective c框架中使用swift扩展

如何在swift中导入Objective c文件

如何在swift中导入Objective c文件

Objective-C/Swift中定义常量有啥区别?

如何在 Swift 中调用 Objective C UIView 的 initWithFrame

如何在 Swift 或 Objective C 中将文本添加到文件中?