UnsafeMutablePointer作为PyObjC中的输出参数

时间:2017-04-29 09:41:52

标签: python objective-c pyobjc

在PyObjC中,当函数为void时,我可以传递None作为输出参数,然后我将在返回的值中得到输出参数但是当涉及到非void的函数时,我找不到一个例子它是怎么回事完成。我要做的是从已经启动的NSLayoutManager实例中获取以下函数中的GlyphBuffer。这是Objective c中的语法:

NSInteger numGlyphs = [layoutManager numberOfGlyphs];
NSGlyph *glyphs = (NSGlyph *)malloc(sizeof(NSGlyph) * (numGlyphs + 1)); 
[layoutManager getGlyphs:glyphs range:NSMakeRange(0, numGlyphs)];
[textStorage removeLayoutManager:layoutManager];

正如您所看到的,字形是一个NSGlyphs数组,其长度由layoutManager numberOfGlyphs返回。我在python中使用以下方法:

layoutManager.getGlyphsInRange_glyphs_properties_characterIndexes_bidiLevels_ (glyphsRange, None, None, None, None)

但是我没有获得字形缓冲区,因为函数不是void,而是返回glyphBuffer中的字形数,如here所述。字形缓冲区应该是UnsafeMutablePointer。我找不到将NSGlyph数组传递给第二个参数的方法。当我通过列表时,我得到一个追溯:

ValueError: depythonifying 'pointer', got 'list'

有谁知道它是否可能以及如何实现?

由于

2 个答案:

答案 0 :(得分:0)

点击此博客

http://michaellynn.github.io/2015/08/08/learn-you-a-better-pyobjc-bridgesupport-signature/

它应该有一些如何完成你正在寻找的例子。

答案 1 :(得分:0)

因为我试图在LayoutManager中提取字形的位置,所以我使用了LayoutManager的locationForGlyphAtIndex方法,它可以很好地用于我的目的。