加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中正确初始化UnsafePointer?

发布时间:2020-12-14 05:51:59 所属栏目:百科 来源:网络整理
导读:我正在尝试使用CTFontCreatePathForGlyph(font:CTFont?,glyph:CGGlyph,transform:CConstPointer CGAffineTransform): let myFont = CTFontCreateWithName("Helvetica",12,nil)let myGlyph = CTFontGetGlyphWithName(myFont,"a")let myTransform = CGA
我正在尝试使用CTFontCreatePathForGlyph(font:CTFont?,glyph:CGGlyph,transform:CConstPointer< CGAffineTransform>):
let myFont = CTFontCreateWithName("Helvetica",12,nil)
let myGlyph = CTFontGetGlyphWithName(myFont,"a")
let myTransform = CGAffineTransformIdentity

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

我已经尝试创建一个myTransformPointer来传递给这样的功能:

var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer().initialize(newvalue: myTransform)

但是我收到这个错误:

Playground execution failed: error: <REPL>:20:76: error: '()' is not convertible to 'UnsafePointer<CGAffineTransform>'
var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer().initialize(newvalue: myTransform)

所以我尝试明确地命名类型:

var myTransformPointer: UnsafePointer<CGAffineTransform> = UnsafePointer<CGAffineTransform>().initialize(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)
                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

自动完成建议这应该工作?

最简单的解决方案是使用withUnsafePointer函数:
let myFont = CTFontCreateWithName("Helvetica","a")
var myTransform = CGAffineTransformIdentity

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

初始化不是构造函数。您将不得不使用UnsafePointer< T> .alloc分配一个新内存,然后初始化然后释放。功能withUnsafePointer为您做的一切。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读