如何拆分 NSAttributedString

How to split a NSAttributedString

我从 rtf 文件导入了一个 NSAttributedString,现在我想将它拆分为另一个给定的字符串。使用 attributedSubstring 方法你得到一个 attributedSubstring 作为结果,但我想在每个部分拆分它,在另一个 String 出现的地方,所以结果应该是一个 NSAttributedStrings 数组。 示例:
var source = NSAttributedString(string: "I*** code*** with*** swift") var splitter = "***" var array = //The method I am looking for 结果应该是以下 Array(with attributedStrings): [I, code, with, swift]

以下扩展方法将使用 Array.map 的字符串组件映射到 [NSAttributedString]

extension NSAttributedString {
    func components(separatedBy string: String) -> [NSAttributedString] {
        var pos = 0
        return self.string.components(separatedBy: string).map {
            let range = NSRange(location: pos, length: [=10=].count)
            pos += range.length + string.count
            return self.attributedSubstring(from: range)
        }
    }
}

用法

let array = NSAttributedString(string: "I*** code*** with*** swift").components(separatedBy: "***")