我想从NSAttributedString获取由特定字符串分隔的组件。在swift中可以吗?
我可以为NSString执行此操作,但我不确定如何为NSAttributedString执行相同操作?
答案 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")
我们将使用map
和flatMap
函数。重点是attributedSubstring(from: nsRange)
的使用,因为它会返回
我们的父NSAttributedString
的{{1}}具有所有效果。
使用attributedString
是因为我们的flatMap
函数返回map
,我们希望摆脱选项。
NSAttributedString?
输出:
[test string1 {},test string2 {},test string3 {}]