Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中正确初始化非安全指针?_Swift - Fatal编程技术网

如何在Swift中正确初始化非安全指针?

如何在Swift中正确初始化非安全指针?,swift,Swift,我正在尝试使用CTFontCreatePathForGlyph(font:CTFont?,glyph:cglyph,transform:CConstPointer): 但是如何正确地将myTransform传递到CTFontCreatePathForGlyph 我尝试创建一个myTransformPointer传递给函数,如下所示: var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer().i

我正在尝试使用
CTFontCreatePathForGlyph(font:CTFont?,glyph:cglyph,transform:CConstPointer)

但是如何正确地将
myTransform
传递到
CTFontCreatePathForGlyph

我尝试创建一个
myTransformPointer
传递给函数,如下所示:

var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer().initialize(newvalue: myTransform)
var myTransformPointer:UnsafePointer=UnsafePointer()。初始化(newvalue:myTransform)
但我得到了这个错误:

Playground execution failed: error: <REPL>:20:76: error: '()' is not convertible to 'UnsafePointer<CGAffineTransform>'
var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer().initialize(newvalue: myTransform)
执行失败:错误::20:76:错误:“()”不能转换为“UnsafePointer”
var myTransformPointer:UnsafePointer=UnsafePointer().initialize(newvalue:myTransform)
因此,我尝试显式命名类型:

var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer<CGAffineTransform>().initialize(newvalue: myTransform)
var myTransformPointer:UnsafePointer=UnsafePointer()。初始化(newvalue:myTransform)
然后我得到一个不同的错误:

Playground execution failed: error: <REPL>:20:95: error: could not find an overload for 'init' that accepts the supplied arguments
var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer<CGAffineTransform>().initialize(newvalue: myTransform)
                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
执行失败:错误::20:95:错误:找不到接受所提供参数的“init”的重载
var myTransformPointer:UnsafePointer=UnsafePointer().initialize(newvalue:myTransform)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

自动完成提示这应该可以工作?

最简单的解决方案是使用
with unsafepointer
函数:

let myFont = CTFontCreateWithName("Helvetica", 12, nil)
let myGlyph = CTFontGetGlyphWithName(myFont, "a")
var myTransform = CGAffineTransformIdentity

var path = withUnsafePointer(&myTransform) { (pointer: UnsafePointer<CGAffineTransform>) -> (CGPath) in
    return CTFontCreatePathForGlyph(myFont, myGlyph, pointer)
}
让myFont=CTFontCreateWithName(“Helvetica”,12,无)
让myGlyph=CTFontGetGlyphWithName(myFont,“a”)
var myTransform=CGAffineTransformity
var path=withUnsafePointer(&myTransform){(指针:UnsafePointer)->(CGPath)在
返回CTFontCreatePathForGlyph(myFont、myGlyph、指针)
}
初始化
不是构造函数。您必须
alloc
使用
UnsafePointer.alloc
创建一个新内存,然后
initialize
,然后
dealloc
。带有unsafepointer的函数
可以为您完成所有这些


请注意,
myTransform
不能是常量(
var
not
let
),否则您不能将其用于
inout
参数(
&myTransform
)。

我只是在操场上试过,没有给出错误,但是它将
path
作为
\uu NSCFType
而不是预期的
CGPath
提供。将在应用程序中进行测试,以确定这是否是游乐场问题。谢谢你的回复!我在文档中看到了
withunsaepointer
函数,但我完全没有看到它也可以用来创建指针;在应用程序中工作,但不在操场中工作。也许这是对运动场的有意限制,因为我在另一个问题(链接)中遇到了类似的问题。如果是这样的话,如果操场抛出了一个错误,而不是仅仅给出有点不透明的
\uu NSCFType
,那就好了。。。再次感谢你的回答@Matthew它是
\uu NSCFType
,因为
CGPath
没有真正的运行时类型。即使在Obj-C中,您也无法获得
CGPath
的类型,因为它是C结构,而不是Obj-C对象。感谢您的解释!我确认它在操场上也能起作用。我原以为这不是因为当我尝试使用
路径构建
NSBezierPath
时它不起作用——我认为这不是因为它显示的是
\uuu NSCFType
而不是
cRect
(谷歌建议可能是一个与内存相关的bug),而实际上这只是我的一个语法错误。哎呀。
let myFont = CTFontCreateWithName("Helvetica", 12, nil)
let myGlyph = CTFontGetGlyphWithName(myFont, "a")
var myTransform = CGAffineTransformIdentity

var path = withUnsafePointer(&myTransform) { (pointer: UnsafePointer<CGAffineTransform>) -> (CGPath) in
    return CTFontCreatePathForGlyph(myFont, myGlyph, pointer)
}