我正在尝试从属性字符串中获取属性。除非字符串为空,否则一切正常。看看:
/variable[^>]*?ABRA[^>]*\/>/g
为什么我在最后一行超出界限?
答案 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