我试图将一些代码移植到使用UIFont
和CTFont
的Swift,并且(成功地,在Objective-C中)使用简单的桥接转换来从一个到另一个反之亦然。
例如,请考虑此代码(在UIFontDescriptor类别中):
UIFont *font = [UIFont fontWithDescriptor:self size:0.0];
NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font));
我还没有能够以一种实际编译的方式弄清楚如何在Swift中表达这一点。以下至少没有:
let font = UIFont(descriptor:self, size: 0.0)
let features = CTFontCopyFeatures(font as CTFont)
错误:' UIFont'不能转换为CTFont'
答案 0 :(得分:1)
试试这个。您不能仅仅将值从一种类型强制转换为另一种类型。如果你从描述符和大小创建一个CTFont,它似乎给你一个有效的数组,即使你没有包含转换矩阵(nil参数)
let font = CTFontCreateWithFontDescriptor(descriptor, 0.0, nil)
let features: NSArray = CTFontCopyFeatures(font)
至于创建CTFontDescriptor,我会使用CTFontDescriptorCreateWithNameAndSize
或CTFontDescriptorCreateWithAttributes
,具体取决于您最初提供的内容。后者采用简单的NSDictionary,前者只使用字体名称和大小。
要从现有字体(称为originalFont
)转到,只需执行以下操作即可获取描述符:
let font = CTFontCreateWithName(originalFont.fontName as CFStringRef,
originalFont.pointSize as CGFloat, nil)
答案 1 :(得分:1)
这显然已在更高版本的Swift和/或CoreText
中得到修复。至少它现在在我使用Xcode 7.0.1的测试中工作。