2016-12-01 2 views
-1

новое для быстрого я не понимаю, как обрабатывать ошибки. Я понял, используя охрану, бросаю, делаю и пробую свои методы.Обработка ошибок на родных методах swift

Но как я могу обрабатывать ошибки из яблока нативных методов, как:

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

, потому что это может привести к сбою, скажем, диапазон не хорошо, я знаю, что это приведет к краху, но когда я окружать этот код сделай try catch Xcode сообщает мне, что в выражении «try» не происходит никаких вызовов функций броска. Я понимаю, что addAttribute не обрабатывает ошибку throw.

Мой вопрос: как я могу справиться с крахом этого метода?

Благодаря

+1

Вы не! Сбой - это нечто совершенно иное, чем исключение, которое вы «бросаете». Авария, которую вы не можете и не должна улавливать - авария всегда указывает на ошибку, которую вы, как разработчик представил. Например, ваша работа заключается в том, чтобы убедиться, что диапазоны верны. – luk2302

+0

да, конечно, 1-й, я не лучший из тех, кто когда-либо был, второй я не несу ответственности за данные, и я не доверяю им, 3-го я бы хотел понять. В Objc я могу использовать попытку 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

Смежные вопросы