当前位置: 首页 > 面试题库 >

如何获得函数抛出的错误列表?

龚弘业
2023-03-14
问题内容

现在,使用Swift时,某些函数都标有throws,这迫使开发人员在do - try catch块内调用该函数。但是开发人员如何才能知道该函数抛出的不同异常列表?

作为参考,这是一行Java代码:

static void  employeeAge(int age) throws MyExceptionA,MyExceptionB

很明显,例外是2 MyExceptionAMyExceptionB开发人员可以根据错误决定采取不同的操作。

我们可以在Swift上实现相同的目标吗?


问题答案:

当Swift文档说一个函数时throws,它们意味着它抛出一个ErrorType(在Cocoa API中通常为NSError),而不是异常。

考虑以下do-try- catch流量NSFileManagercreateDirectoryAtPath

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

do {
    try NSFileManager.defaultManager().createDirectoryAtPath(documentsPath, withIntermediateDirectories: false, attributes: nil)
} catch { 
    // 'error' variable automatically populated
    print(error)
    print(error.dynamicType)
}

createDirectoryAtPath将失败,因为documents目录已经存在。日志记录dynamicType的的error显示,它实际上是一个NSError对象:

Error Domain=NSCocoaErrorDomain Code=516 "The file “Documents” couldn’t

be saved in the folder “35B0B3BF-D502-4BA0-A991-D07568AB87C6” because a file
with the same name already exists.”
UserInfo={NSFilePath=/Users/jal/Library/Developer/CoreSimulator/Devices/E8A35774-C9B7-42F0-93F1-8103FBBC7118/data/Containers/Data/Application/35B0B3BF-D502-4BA0-A991-D07568AB87C6/Documents,
NSUnderlyingError=0x7fa88bd14410 {Error Domain=NSPOSIXErrorDomain Code=17
“File exists”}}


NSError

为了查看函数可以throw遇到的不同类型的错误,您必须检查的error信息,以确定抛出的错误的类型以及如何处理每个错误。在这种情况下,NSError将是其域,代码和描述。

在这种特殊情况下,该路径上已经存在一个目录,因此文件管理器无法创建新目录。该操作可能失败的另一个原因的一个例子是,如果文件管理器没有写访问权限。那将是错误代码256。



 类似资料:
  • 我有一个类(我不能修改),它只有一个构造函数,它接受一个参数,如下所示: 由于构造函数可以抛出错误,我想实现错误处理。我的第一次尝试是: 但是,现在在块的范围内,不能在其他地方使用。如果我理解正确,我不能在没有初始化的情况下声明对象,因此我可以在块之外声明。那么,我该如何捕捉构造函数抛出的错误呢? 编辑:为了澄清,这是在我的中,在中我将中止程序。此外,参数是一个将被打开的文件,因此没有已知的安全输

  • 在Javascript中的异步生成器函数中,第一个参数本身就是一个异步生成器函数,该函数用于转换函数。在函数中有一个转换和一个检查。如果检查不正确,应中止发电机功能。如果检查正确,则应得出结果。我用随机数模拟了误差。 我找到了三种抛出错误的方法: 返回Promise.reject(新的错误(一些消息); 抛出新的错误(一些消息。); 产生Promise.reject(新的错误(一些消息); 所有的

  • 问题内容: 我有一个员工表,如下所示: 我需要获取id等于4的问题的最小值和最大值。在这种情况下,我需要返回5和25。我使用以下查询实现了这一点: 但是,这不会返回的是问题ID。如何调整查询以显示q2是最小值,q4是最大值?我知道我可以写一个大写的语句,但是我也觉得可以使用联接来完成,但是我不知道。 注意:这是针对postgresql数据库的,但是我也标记了MySQL,因为我知道它也支持和函数。如

  • 我试图整理一个规范的例子,说明如何获得Python中所有内置函数的列表。留档是好的,但我想证明它与一个可证明的方法。 在这里,我将内置函数定义为默认名称空间的成员,这些成员是可用的,并且与用于模块的函数的风格特征一致,也就是说:它们提供一些有用的功能,并以字母表中的小写字母开始。 我在这里做的好处是,我演示了列表理解的过滤部分,但这似乎有点肮脏,应该有一种更直接的方法来做这件事。以下是我目前正在做

  • 在我的Node.js应用程序的测试中,让Chai的 工作时遇到了问题。测试在抛出的错误上不断失败,但是如果我将测试用例包装在try和catch中,并在捕获的错误上断言,它就会工作。 不像我认为的那样工作吗? 失败:

  • 出于某种原因,这段代码给了我一个无法捕捉的异常错误。catch块似乎没有捕捉到错误。try catch块的作用范围是否如此,以至于我不能在嵌套函数中抛出一个错误,然后期望它被一个作用范围更高的catch语句捕获?我正在使用的应用程序中的一些敏感数据已经被删除,但它预期leadInfo[ 0 / 1]将是一个32个字符的字母数字字符串,我从URL参数中提取。 这里的根本问题是我的AJAX调用从API