2017-05-26 90 views
3

我試圖從屬性字符串中獲取屬性。除非字符串爲空,否則一切正常。看一看:NSAttributedString獲取屬性越界異常

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

爲什麼我在最後一行出現越界異常?

+0

它也在Objective-C中崩潰。在'if s.string.isEmpty'之前檢查? – Larme

+0

@Larme這就是我解決這個問題的方法,但我想知道爲什麼會發生這種情況 – Kubba

回答

2

這是預期的結果。如果一個字符串的長度是0(「」的情況),它在索引0處沒有字符,所以當你試圖用s.attributes訪問它時,你需要得到一個超出界限的異常。

由於索引從0開始,所以index = 0只存在於String.length> 0中。

您可以通過使用長度爲1的字符串並向s.attributes輸入1來輕鬆檢查。

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