为了理解这些常数,让我们看看
CTFontStylisticClass
documentation
:
类值绑定在
CTFontSymbolicTraits
kCTFontClassMaskTrait
.
为了验证,让我们看看
kCTFontClassMaskTrait
documentation
. 如果将语言设置为Objective-C,文档将显示
:
kCTFontClassMaskTrait = kCTFontTraitClassMask
好吧,让我们看看
kCTFontTraitClassMask
documentation
. 同样,如果将语言设置为Objective-C,则可以看到常量的定义:
kCTFontTraitClassMask = (15U << kCTFontClassMaskShift)
的确,
15U
转换
CTFontSymbolicTraits公司
CtfontStyleClass类
,我们需要使用掩码从
CTFontSymbolicTraits公司
CtfontStyleClass类
. 我们可以使用位运算符进行选择
&
,或使用
OptionSet
方法
intersection
我们真正想要的,在斯威夫特,是
CTFontSymbolicTraits公司
CtfontStyleClass类
. 所以让我们写一个扩展:
extension CTFontSymbolicTraits {
var stylisticClass: CTFontStylisticClass {
return CTFontStylisticClass(rawValue: self.intersection(.classMaskTrait).rawValue)
}
}
我们来测试一下:
import CoreText
import Foundation
extension CTFontSymbolicTraits {
var stylisticClass: CTFontStylisticClass {
return CTFontStylisticClass(rawValue: self.intersection(.classMaskTrait).rawValue)
}
}
func checkSansSerifness(fontName: String) {
let font = CTFontCreateWithName(fontName as CFString, 12, nil)
let fullName = CTFontCopyName(font, kCTFontFullNameKey)!
if CTFontGetSymbolicTraits(font).stylisticClass.contains(.sansSerifClass) {
print("\(fullName) is sans serif.")
} else {
print("\(fullName) is not sans serif.")
}
}
checkSansSerifness(fontName: "Helvetica")
checkSansSerifness(fontName: "Times New Roman")
输出:
Helvetica is sans serif.
Times New Roman is not sans serif.