【发布时间】:2017-05-03 08:10:40
【问题描述】:
在 Swift 3 中,将(可能很多)附加信息放入错误/异常中以供捕获器用来解决/处理问题的推荐方法是什么?在我看到的所有示例中,他们使用带有关联值的 enums,对于大量信息而言,这似乎过于繁琐/冗长。
具体来说,我正在编写一个简单的解析器,并希望有一个地方来存储受影响的行号和列号(以及将来可能的其他信息),但不需要每个处理程序都将它们显式声明为关联值,因为那将是调用者的负担。
在这一点上,我基本上可以看到两种方法,看起来都不是特别优雅,而且都需要定义两个不同的东西:
- 定义一个表示错误类型的外部
enum错误,并为每种情况接受一个参数,该参数是一个包含其他异常详细信息的对象,或者 - 将该对象用作实际的
Error,并将enum中的一个case 传递给它的构造函数以表示实际的错误情况。
这两个对我来说都有些不干净,因为它们使用两个独立的概念来表示一个简单的想法,一个错误,我只是想知道是否有更好的方法来做到这一点。
是否有任何约定或推荐的方法来处理可能需要包含大量附加信息的错误?
【问题讨论】:
-
我不确定我是否正确理解了你的问题,一个具体的例子可能会有所帮助。 – 但请注意 1)
enum可以有关联值,2) 错误可以是struct或class(带有属性),它不必是enum。 -
我想如果我可以使用一个结构并使用选项2,这与更传统的异常对象基本相同,如果我在该结构内定义枚举它不会太难看.
-
具体来说,我正在编写一个简单的解析器,并希望有一个地方来存储受影响的行号和列号(以及未来可能的其他信息),但不需要每个处理程序都明确地将它们添加为关联值。
-
“可能有很多附加信息” 是什么意思?一组固定的属性,或任意信息,如
NSError中的userInfo字典? -
就我而言,这将是一组固定的属性。
标签: swift error-handling swift3