NSAttributedString获取超出范围的属性异常

时间:2017-05-26 13:00:28

标签: swift nsattributedstring

我正在尝试从属性字符串中获取属性。除非字符串为空,否则一切正常。看看:

/variable[^>]*?ABRA[^>]*\/>/g

为什么我在最后一行超出界限?

2 个答案:

答案 0 :(得分:4)

这是预期的结果。如果字符串的长度为0(""的情况),它在索引0处没有字符,所以当您尝试使用s.attributes访问它时,您应该得到一个超出范围的例外。

由于索引从0开始,因此只有String.length> 0才存在index = 0。

您可以使用长度为1的字符串并输入1到s.attributes来轻松检查。

let s = NSAttributedString(string: "a", attributes: [NSForegroundColorAttributeName: UIColor.red])
let range = NSMakeRange(0, s.length)
let attrs = s.attributes(at: 1, longestEffectiveRange: nil, in: range)    //also produces out of bounds error

答案 1 :(得分:1)

由于您不关心longestEffectiveRange,请使用效率更高的attribute(_:at:effectiveRange:)

如果你调用空字符串,两者都会抛出。这是因为at location:参数必须在字符串的范围内。它的文档说:

  

重要

     

如果index超出接收者字符的末尾,则引发rangeException。

https://developer.apple.com/reference/foundation/nsattributedstring/1408174-attribute