来自CGAffineTransform的UnsafePointer <cgaffinetransform>

时间:2015-12-17 19:37:25

标签: swift pointers unsafe-pointers

我正在尝试在Swift中创建一个CGPath。我正在使用CGPathCreateWithRect(rect, transformPointer)

如何从UnsafePointer<CGAffineTransform>获得CGAffineTransform?我试过这个:

    let transform : CGAffineTransform = CGAffineTransformIdentity
    let transformPointer : UnsafePointer<CGAffineTransform> = UnsafePointer(transform)

我也试过这个:

    let transform : CGAffineTransform = CGAffineTransformIdentity
    let transformPointer : UnsafePointer<CGAffineTransform> = &transform 

但斯威夫特抱怨'&' with non-inout argument of type...。我也尝试将&transform直接传递给CGPathCreateWithRect但是停止时会出现同样的错误。

当我直接传递transform时,Swift“无法将'CGAffineTransform'类型的值转换为预期的参数类型'UnsafePointer'”。

发生了什么,以及如何使用Swift 2.1?

2 个答案:

答案 0 :(得分:16)

  

我也尝试过将&amp; transform直接传递给CGPathCreateWithRect ......

你快到了。 transform需要是变量 为了将其作为inout参数传递给&

var transform = CGAffineTransformIdentity
let path = CGPathCreateWithRect(CGRect(...), &transform)

有关详细信息,请参阅"Interacting with C APIs" 在“使用Swift with Cocoa和Objective-C”文档中。

Swift 3 中,这将是

var transform = CGAffineTransform.identity
let path = CGPath(rect: rect, transform: &transform)

或者,对于身份变换,只需

let path = CGPath(rect: rect, transform: nil)

答案 1 :(得分:3)

@Martin R提供了最佳答案,但作为替代方案,我喜欢以这种方式使用我的不安全可变指针,以防你将来需要改变实际指针

let path = withUnsafeMutablePointer(&transform)
{
  CGPathCreateWithRect(CGRect(...), UnsafeMutablePointer($0))
}