2016-08-11 23 views
1

如何创建UnsafePointer? 试图让mediaBoxPtr = UnsafePointer(媒体框),但未能如何从现有的CGRect创建不安全的指针<CGRect>

func PDFImageData(filter: QuartzFilter?) -> NSData? { 
    let pdfData = NSMutableData() 
    let consumer = CGDataConsumerCreateWithCFData(pdfData); 
    var mediaBox = CGRect(x: 0, y: 0, width: bounds.size.width, height: bounds.size.height) 
    let mediaBoxPtr : UnsafePointer<CGRect> = nil //???? I need CGRect(x:0, y:0, bounds.size.width, bounds.size.height) 
    if let pdfContext = CGPDFContextCreate(consumer, mediaBoxPtr, nil) { 
     filter?.applyToContext(pdfContext)} 

回答

3

您不必创建一个指针。简单地用&传递mediaBox 变量为 “INOUT参数” 的地址:

var mediaBox = CGRect(x: 0, y: 0, width: bounds.size.width, height: bounds.size.height) 
if let pdfContext = CGPDFContextCreate(consumer, &mediaBox, nil) { 
    // ... 
} 

有关详细信息和实例,参见"Interacting with C APIs"

易变指针

当一个函数被声明作为参数UnsafeMutablePointer<Type> 的说法,它可以接受以下任何一种:

  • ...
  • 一种在出表达包含一个可变变量,属性或Type型,其作为一个指向可变值的地址传递的下标参考。
  • ...
+0

谢谢,试过,但它无法编译,现在它可以作为一个魅力(我发现这个答案之前)。重要的部分是使用var而不是let。我知道... –