如何在 Swift 中比较 NSFontSymbolicTraits 和 NSFontBoldTrait?

Las*_*sse 1 macos cocoa objective-c nsfont swift

我试图在 Swift 中NSFontSymbolicTraits按位比较和。NSFontBoldTrait

在 Objective-C 中,它会像这样完成:

BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold);
Run Code Online (Sandbox Code Playgroud)

所以我想在 Swift 中应该是这样的:

let isBold:Bool = font.fontDescriptor.symbolicTraits & NSFontBoldTrait
Run Code Online (Sandbox Code Playgroud)

...但是这会导致以下错误:

无法使用类型为“(NSFontSymbolicTraits, Int)”的参数列表调用“&”

有人知道我错过了什么吗?任何帮助将不胜感激。

注意事项:

Nat*_*ook 5

在 Swift 中,NSFontSymbolicTraits是 的类型别名UInt32。因此,要检查特定特征是否存在,您需要将按位的结果&与零进行比较。不幸的是,各个约束已作为 type 导入Int,因此您还需要将它们转换为正确的类型:

let isBold = 0 != (font.fontDescriptor.symbolicTraits & NSFontSymbolicTraits(NSFontBoldTrait))
Run Code Online (Sandbox Code Playgroud)

如果您想在 iOS(而不是 OS X)中执行此操作,UIFont则有不同的实现。UIFontDescriptorSymbolicTraits是 a RawOptionSetType,因此您将您的结果&与进行比较nil:

let isBold = nil != (font.fontDescriptor().symbolicTraits & UIFontDescriptorSymbolicTraits.TraitBold)
Run Code Online (Sandbox Code Playgroud)

  • 在我的测试中,我做到了。否则我会遇到编译器错误。 (2认同)