在为 iOS 开发 Swift 库 时,您是否会将库沙盒化,这样库中的错误就不会在主机应用程序中重现? (= Uncaught Error 不会使应用程序崩溃)
这里有一些线索,但并未完美涵盖所有内容:
- 使用
NSSetUncaughtExceptionHandler
:只捕获 Obj-c 异常 (NSException) - 使用带有 try/catch 和闭包的后台队列,例如 here .
可以将 disered 行为与 Android 进行比较,在 Android 中,您可以拥有一个线程并在其上拥有一个 Thread.UncaughtExceptionHandler
,因此此处出现的所有错误都会被捕获。
由于语言的设计(参见 here),除了 try/catch everything 之外可能没有合适的解决方案。
最佳答案
通常,在 iOS 中,您会在不再安全继续的情况下抛出异常。例如,如果主机应用程序将错误的初始化数据传递给您的库,您应该崩溃,因为它是继续运行的未定义行为。
事实证明,崩溃只是您能做的第三糟糕的事情,因此您应该这样做,而不是两件更糟糕的事情中的任何一件。
最糟糕的事情:
- 损坏的用户数据
- 难以诊断问题(未定义的行为、不一致的行为等)
- 崩溃
要么崩溃,要么对可能失败的方法使用 throws
,返回 nil
,或者返回一个 Error
对象回调。
关于ios - Sandbox Swift 代码在受控环境中,错误安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46644096/