加粗Swift中的文本范围,不设置特定字体(OSX)

加粗Swift中的文本范围,不设置特定字体(OSX),swift,macos,Swift,Macos,我正在尝试将此代码示例转换为在OSX应用程序上使用: func applyStylesToRange(searchRange: NSRange) { let fontDescriptor = UIFontDescriptor.preferredFontDescriptorWithTextStyle(UIFontTextStyleBody) let boldFontDescriptor = fontDescriptor.fontDescriptorWithSymbolicTrait

我正在尝试将此代码示例转换为在OSX应用程序上使用:

func applyStylesToRange(searchRange: NSRange) {
    let fontDescriptor = UIFontDescriptor.preferredFontDescriptorWithTextStyle(UIFontTextStyleBody)
    let boldFontDescriptor = fontDescriptor.fontDescriptorWithSymbolicTraits(.TraitBold)
    let boldFont = UIFont(descriptor: boldFontDescriptor, size: 0)
    let normalFont = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

    let regexStr = "(\\*\\w+(\\s\\w+)*\\*)"
    let regex = NSRegularExpression(pattern: regexStr, options: nil, error: nil)!
    let boldAttributes = [NSFontAttributeName : boldFont]
    let normalAttributes = [NSFontAttributeName : normalFont]

    regex.enumerateMatchesInString(backingStore.string, options: nil, range: searchRange) {
        match, flags, stop in
        let matchRange = match.rangeAtIndex(1)
        self.addAttributes(boldAttributes, range: matchRange)

        let maxRange = matchRange.location + matchRange.length
        if maxRange + 1 < self.length {
          self.addAttributes(normalAttributes, range: NSMakeRange(maxRange, 1))
        }
    }
}
问题在于,与正则表达式匹配的文本(因此粗体)不会响应用户发起的字体更改(包括字体和大小)。而且,当用户更改OSX字体大小时,似乎并没有像iOS那样方便的NSNotificationCenter消息

let fontManager = NSFontManager.sharedFontManager()
let normalFont = NSFont.userFontOfSize(0)
let boldFont = fontManager.convertFont(normalFont!, toHaveTrait: .BoldFontMask)