Ios 如何在Swift 2.0中创建CTRunDelegate

Ios 如何在Swift 2.0中创建CTRunDelegate,ios,swift,core-text,Ios,Swift,Core Text,我正在使用CoreText处理NSTextAttachment。CoreText需要CtrUnelegate来布局附件。但我在运行以下代码时出错 class RunDelegate: NSObject { let image: UIImage let font: UIFont init(image: UIImage, font: UIFont) { self.image = image self.font = font } }

我正在使用CoreText处理NSTextAttachment。CoreText需要CtrUnelegate来布局附件。但我在运行以下代码时出错

class RunDelegate: NSObject {
    let image: UIImage
    let font: UIFont

    init(image: UIImage, font: UIFont) {
        self.image = image
        self.font = font
    }
}

private func generateRunDelegate(attachment: NSTextAttachment, font: UIFont) -> CTRunDelegateRef {
    var d = RunDelegate(image: attachment.image!, font: font)
    var cbs = CTRunDelegateCallbacks(version: kCTRunDelegateCurrentVersion, dealloc: { (p) -> Void in

        }, getAscent: { (p) -> CGFloat in
            let d = UnsafeMutablePointer<RunDelegate>(p).memory
            return d.image.size.height + d.font.descender // Error here, EXC_BAD_ACCESS(code = 1)
        }, getDescent: { (p) -> CGFloat in
            let d = UnsafeMutablePointer<RunDelegate>(p).memory
            return -d.font.descender
        }) { (p) -> CGFloat in
            let d = UnsafeMutablePointer<RunDelegate>(p).memory
            return d.image.size.width
    }
    return CTRunDelegateCreate(&cbs, &d)!
}
类RunDelegate:NSObject{
let image:UIImage
字体:UIFont
初始化(图像:UIImage,字体:UIFont){
self.image=image
self.font=font
}
}
专用func GeneratorUndelegate(附件:NSTextAttachment,字体:UIFont)->CTRunDelegateRef{
var d=RunDelegate(图像:attachment.image!,字体:font)
var cbs=CTRunDelegateCallbacks(版本:kCTRunDelegateCurrentVersion,dealloc:{(p)->Void in
},getAscent:{(p)->CGFloat-in
设d=unsafemeutablepointer(p).memory
返回d.image.size.height+d.font.downer//此处有错误,EXC\u访问错误(code=1)
},getDescent:{(p)->CGFloat-in
设d=unsafemeutablepointer(p).memory
返回-d.font.downer
}){(p)->CGFloat in
设d=unsafemeutablepointer(p).memory
返回d.image.size.width
}
返回CTRunDelegateCreate(&cbs,&d)!
}
有人能帮忙吗?谢谢

请尝试此代码

class RunDelegate: NSObject {
    let image: UIImage
    let font: UIFont

    class func object(pointer: UnsafeMutablePointer<Void>) -> RunDelegate {
        return Unmanaged<RunDelegate>.fromOpaque(COpaquePointer(pointer)).takeRetainedValue()
    }

    init(image: UIImage, font: UIFont) {
        self.image = image
        self.font = font
    }
}

private func generateRunDelegate(attachment: NSTextAttachment, font: UIFont) -> CTRunDelegateRef {
    var d = RunDelegate(image: attachment.image!, font: font)
    var cbs = CTRunDelegateCallbacks(version: kCTRunDelegateCurrentVersion,
           dealloc: { (p) -> Void in

        }, getAscent: { (p) -> CGFloat in
            let d = RunDelegate.object(pointer: p)
            return d.image.size.height + d.font.descender
        }, getDescent: { (p) -> CGFloat in
            let d = RunDelegate.object(pointer: p)
            return -d.font.descender
        }) { (p) -> CGFloat in
            let d = RunDelegate.object(pointer: p)
            return d.image.size.width
    }
    return CTRunDelegateCreate(&cbs, d)!
}
类RunDelegate:NSObject{
let image:UIImage
字体:UIFont
类func对象(指针:UnsafeMutablePointer)->RunDelegate{
返回Unmanaged.from不透明(COpaquePointer)).takeRetainedValue()
}
初始化(图像:UIImage,字体:UIFont){
self.image=image
self.font=font
}
}
专用func GeneratorUndelegate(附件:NSTextAttachment,字体:UIFont)->CTRunDelegateRef{
var d=RunDelegate(图像:attachment.image!,字体:font)
var cbs=CTRunDelegateCallbacks(版本:kCTRunDelegateCurrentVersion,
dealloc:{(p)->Void in
},getAscent:{(p)->CGFloat-in
设d=RunDelegate.object(指针:p)
返回d.image.size.height+d.font.downer
},getDescent:{(p)->CGFloat-in
设d=RunDelegate.object(指针:p)
返回-d.font.downer
}){(p)->CGFloat in
设d=RunDelegate.object(指针:p)
返回d.image.size.width
}
返回CTRunDelegateCreate(&cbs,d)!
}

我认为它不是正确生成的。

请为您的答案提供一些上下文和基本原理,而不是简单地发布代码。