我有一个创建 CFAttributedStringRef 的 obj-c 类:
- (CFAttributedStringRef)createAttributedStringWithByteRange:(NSRange)byteRange
{
UInt8 bytes[byteRange.length];
[self.data getBytes:&bytes range:byteRange];
CFStringRef string = CFStringCreateWithBytes(NULL, bytes, byteRange.length, kCFStringEncodingUTF8, (byteRange.location == 0));
return CFAttributedStringCreate(NULL, string, (__bridge CFDictionaryRef)(self.textAttributes));
}
我正在尝试从 swift 对象调用该函数,该对象应该创建一个 CTTypesetter:
let stringToDraw = self.storage.createAttributedStringWithByteRange(self.line.range)
let typesetter = CTTypesetterCreateWithAttributedString(stringToDraw)
这给了我这个构建错误:
error: cannot convert the expression's type 'CTTypesetter!' to type '$T3'
let typesetter = CTTypesetterCreateWithAttributedString(stringToDraw)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有人知道我做错了什么吗?
最佳答案
我发现了问题,构建错误具有误导性。
实际问题是前一行 - 我的 obj-c 方法返回 CFAttributedStringRef
桥接Unmanaged<CFAttributedString>
并需要通过 takeRetainedValue()
将其作为托管对象引入 Swift 才能使用。方法:
let stringToDraw = self.storage.createAttributedStringWithByteRange(self.line.range).takeRetainedValue()
let typesetter = CTTypesetterCreateWithAttributedString(stringToDraw)
关于cocoa - 在 Swift 中创建 CTTypesetter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112119/