如何在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)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ORACLE中的日期加减操作实例介绍
- vue ssr 指南详读
- 生成 XML 文档时出错。使用 XmlInclude 或 SoapInclude 特性
- 在Xcode 8.1 / Swift 3.0中使用调试器断点调用两次Delegate
- MSHFlexGrid控件
- 数据存储---GreenPlum实践
- missing required library sqlite.dll最终解决办法
- C初学者 – 作为代码中的命令的’错误’
- VS Code + NWJS(Node-Webkit)0.14.7 + SQLite3 + Angular
- ruby-on-rails-3 – Ruby on Rails 3.2 Mailer,本地化邮件主