如何获得由NSFontCollection
"包含"的字体或字体族的NSArray
?
所有NSFont
和NSFontManager
方法似乎都需要一个NSFontDescriptor
,而NSFontCollection
返回NSFontDescriptor
对象的NSArray
。似乎应该有一个方法来返回匹配这些的字体。
是否需要对所有字体手动查询每个字体描述符?
NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies];
您可以获取字体集合的matchingDescriptors
(NSFontDescriptor
的数组),并向每个描述符询问其-objectForKey:NSFontFamilyAttribute
,并将它们(字符串)转储到一个集合中以惟一它们。
或者,您可以将每个字体描述符转换为字体(通过使用描述符创建字体)并请求其familyName
(然后唯一那些)。
这两个方法在Swift的compactMap()
中都是相当直接的(为了放弃nil
)。