我试着用swift按位比较NSFontSymbolicTraits
和NSFontBoldTrait
。
在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中,NSFontSymbolicTraits
是UInt32
的类型别名。因此,要检查某个特定特征的存在性,需要将按位&
的结果与零进行比较。不幸的是,个别约束已导入为类型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/