【问题标题】:Error handling on native methods swift本机方法的错误处理迅速
【发布时间】:2016-12-01 18:10:34
【问题描述】:

新来的 swift 我不明白如何处理错误。 我已经理解,使用guard、throw、do 和try 为我自己的方法。

但是我如何处理来自苹果本地方法的错误,例如:

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

因为这可能会崩溃,假设范围不好,我知道它会崩溃,但是当我用 do try catch 包围这段代码时,Xcode 告诉我在“try”表达式中没有调用抛出函数。 我的理解是 addAttribute 不处理抛出错误。

我的问题是如何处理这种方法的崩溃?

谢谢

【问题讨论】:

  • 你没有!崩溃与 throw 的异常完全不同。您不能也不能捕获的崩溃 - 崩溃始终表明您作为开发人员引入的错误。例如,确保范围正确是您的工作。
  • 是的,哈哈,当然,第一,我不是有史以来最好的开发者,第二,我不对数据负责,我不信任他们第三,我想了解。在 Objc 中我可以使用 try catch,在 swift 中不可能吗?
  • 在这方面objc和swift没有区别。如果弄乱了范围,两者都会而且应该崩溃。唯一的区别是 swift 编译器会告诉你没有异常,在 objc 中你写了一个 try-catch ,它根本不会有任何效果。
  • 大声笑,谢谢你,我现在明白了,但是在 Objc 中我可以发现错误:)

标签: ios swift guard


【解决方案1】:

此方法不会抛出错误,因此您无法捕获错误。确保函数调用不会失败的唯一方法似乎是手动检查范围是否有效。

例如,您可以使用 rangeOfString(:) 之类的内容从字符串本身获取范围

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

或者简单地验证你的NSRange 对字符串的边界。

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

【讨论】:

  • 不客气。如果您的问题已得到解答,请不要忘记将答案标记为已接受!干杯
猜你喜欢
  • 2017-05-03
  • 2019-01-12
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多