cocoa - 在 Swift 中创建 CTTypesetter

标签 cocoa swift

我有一个创建 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/

相关文章:

ios - 困惑 : Non-nil value unwrapped nil, if-let 子句在 nil 值上执行 block

ios - 更新 NSarray 内特定键的值

iphone - NSLog(@"%@", super )崩溃

xcode - 如何在 OSX 应用程序中使用 Kiwi 单元测试库?

objective-c - 如何启用将密码粘贴到 NSSecureTextField 中?

macos - 当Skype应用程序正在接听/调用电话时,如何接收NSNotification?

ios - 从 Swift 函数中的异步调用返回数据

json - swift 2.3 中 View Controller 的数据加载速度非常慢

swift - 如何在 swift 3 中更改 googlemap 的 myLocationButton 的位置

objective-c - 从 cocoa 应用程序内部运行 WPS