如何从NSAttributedstring中分离属性并将这些属性应用于其他string?

例如。 就像我们有一个NSAttributedstring一样,我们需要将string和属性分开,然后在其他长度相同的string上使用这些属性。

NSAttributedString对于string的不同范围可以具有不同的属性。

要提取这些属性,可以使用enumerateAttributesInRange方法。

我们准备一个元组数组来保存结果:

 var extractedAttributes = [(attributes: [String:AnyObject], range: NSRange)]() 

每个元组将在NSAttributedString中保存特定范围的属性。

现在我们遍历NSAttributedString并用结果填充数组:

 attributedString.enumerateAttributesInRange(NSRange(location: 0, length: attributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, stopEnumerating) in extractedAttributes.append((attributes: dict, range: range)) } 

一旦数组被填充,您可以访问内容:

 for item in extractedAttributes { print(item.attributes) print(item.range) } 

从这里你可以得到所有需要用这些属性创build新的属性string:NSAttributedString中的每个属性都有范围和相应的属性。

你应该从NSAttributedString看看这个方法

 attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject] 

通过在NSAttributedString中调用此方法,您将收到在范围中应用的所有属性。 只需指定所有string作为范围。 然后用这些属性创build新的属性string。