2016-12-01 42 views
-1

新的迅速我不明白如何處理錯誤。 我已經理解,使用警衛,拋出,做和嘗試我自己的方法。從像蘋果機方法錯誤處理本地方法swift

但我怎麼能處理錯誤:

self.displayContent?.addAttribute(NSFontAttributeName, value: UIFont.fontMainFeedContentFont(), range: NSRange.init(location: 0, length: self.displayContent!.length)) 

,因爲這可能會崩潰,讓我們說的範圍是不好的,我知道它會崩潰,但是當我圍繞這個代碼用做嘗試catch Xcode告訴我,在'try'表達式中不會發生調用拋出函數的調用。 我的理解是,addAttribute不處理拋出錯誤。

我的問題是我該如何處理這種方法的崩潰?

謝謝

+1

你不要!崩潰與你拋出的異常完全不同。一個你不能也不能捕獲的崩潰 - 崩潰總是表示你作爲開發者介紹的錯誤。例如,確保範圍是正確的,這是你的工作。 – luk2302

+0

大聲笑當然,第一我不是有史以來最好的開發者,第二我不負責任的數據,我不相信他們第三我想明白。在Objc中,我可以使用try catch,這是不可能的嗎? – user2206906

+0

你不能,比較http://stackoverflow.com/questions/38737880/uncaught-error-exception-handling-in-swift。 –

回答

0

此方法不拋出,所以你不能趕上錯誤。看來確保函數調用不會失敗的唯一方法是手動檢查範圍是否有效。

例如,你可以得到字符串本身範圍內的東西,如rangeOfString(:)

(attributedString.string as NSString).rangeOfString("foo") 

或者乾脆驗證NSRange界對字符串。

if (range.location != NSNotFound && range.location + range.length <= attributedString.length) { /* ok */ } 
+0

是啊,看起來不錯,謝謝你Beeb – user2206906

+0

非常歡迎。如果您的問題得到解答,請不要忘記將答案標記爲已接受!乾杯 – beeb