【问题标题】:How to create UnsafePointer<CGRect> from existing CGRect如何从现有的 CGRect 创建 UnsafePointer<CGRect>
【发布时间】:2016-08-11 13:20:46
【问题描述】:

如何创建 UnsafePointer? 尝试让 mediaBoxPtr = UnsafePointer(mediaBox) 但失败

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)}

【问题讨论】:

    标签: swift cocoa cgrect unsafe-pointers


    【解决方案1】:

    您不必创建指针。只需传递mediaBox 的地址 使用&amp; 将变量作为“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&lt;Type&gt; 参数,它可以接受以下任何一种:

    • ...
    • 包含Type 类型的可变变量、属性或下标引用的输入输出表达式,它作为指向可变值地址的指针传递。
    • ...

    【讨论】:

    • 谢谢,试过了,但编译失败,现在它就像一个魅力(我之前找到了这个答案)。重要的部分是使用 var 而不是 let。我知道...
    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多