NSAttributedString 获取属性越界异常

Kub*_*bba 5 nsattributedstring swift

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

let s = NSAttributedString(string: "", attributes: [NSForegroundColorAttributeName: UIColor.red])
let range = NSMakeRange(0, s.length)
let attrs = s.attributes(at: 0, longestEffectiveRange: nil, in: range)
Run Code Online (Sandbox Code Playgroud)

为什么我在最后一行出现越界异常?

Dáv*_*tor 5

这是预期的结果。如果字符串的长度为 0("" 的情况),则它在索引 0 处没有字符,因此当您尝试使用 s.attributes 访问它时,预计会出现越界异常。

因为索引是从 0 开始的,所以 index=0 只存在于 String.length>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
Run Code Online (Sandbox Code Playgroud)