如何从NSAttributedString获取组件?

时间:2017-09-25 07:25:02

标签: swift nsattributedstring

我想从NSAttributedString获取由特定字符串分隔的组件。在swift中可以吗?

我可以为NSString执行此操作,但我不确定如何为NSAttributedString执行相同操作?

1 个答案:

答案 0 :(得分:0)

因此,要解决问题,我们需要String的扩展名,以便将Range转换为NSRange

extension String {
    func nsRange(fromRange range: Range<Index>) -> NSRange {
        let from = range.lowerBound
        let to = range.upperBound

        let location = characters.distance(from: startIndex, to: from)
        let length = characters.distance(from: from, to: to)

        return NSRange(location: location, length: length)
    }
}

输入数据。

//Input array with \n
let attributedString = NSAttributedString(string: "test string1\ntest string2\ntest string3")

//Simle String
let notAttributedString = attributedString.string

//Array of String components separated by \n
let components = notAttributedString.components(separatedBy: "\n")

我们将使用mapflatMap函数。重点是attributedSubstring(from: nsRange)的使用,因为它会返回 我们的父NSAttributedString的{​​{1}}具有所有效果。 使用attributedString是因为我们的flatMap函数返回map,我们希望摆脱选项。

NSAttributedString?

输出:

  

[test string1 {},test string2 {},test string3 {}]