我试着用swift按位比较NSFontSymbolicTraitsNSFontBoldTrait
在objective-c中,应该这样做:

BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold);

所以我想应该是这样的:
let isBold:Bool = font.fontDescriptor.symbolicTraits & NSFontBoldTrait

…但是,这会导致以下错误:
无法使用类型为(nsFontSymbolicTraits,int)的参数列表调用“&”
有人知道我错过了什么吗?任何帮助都将不胜感激。
笔记:
我像个疯子一样在谷歌上搜索,花了几个小时试图找到解决方案,并阅读了NSFontDescriptor和其他NSFont相关类的文档。
我不太了解obj-c,所以我不知道是不是因为NSFont*Trait constants are implemented differently in Swift?甚至不确定是不是这样。

最佳答案

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

let isBold = 0 != (font.fontDescriptor.symbolicTraits & NSFontSymbolicTraits(NSFontBoldTrait))

如果您想在ios(而不是os x)中执行此操作,UIFont有一个不同的实现。UIFontDescriptorSymbolicTraits是一个RawOptionSetType,因此您可以比较&nil的结果:
let isBold = nil != (font.fontDescriptor().symbolicTraits & UIFontDescriptorSymbolicTraits.TraitBold)

关于objective-c - 您如何在Swift中比较NSFontSymbolicTraits和NSFontBoldTrait?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26086803/

10-11 19:47