返回 NAN 以指示对也设置 NSError 的方法的无效输入的危险



我正在编写一个基于输入参数返回一个(双精度)数字的方法。由于某些输入没有有效的返回值,我希望该方法指示失败,并使用 NSError 提供有关错误的详细信息。Apple 表示(错误处理指南)不使用返回的 NSError 对象来确定失败,而是让该方法返回 bool true 或 false,如果为 false,则检查 NSError 对象。

我计划返回 NAN 以指示失败并检查它以及 NSError 对象,而不是包装类以返回 BOOL 和另一个对象。如果我忘记检查 NAN 然后使用该值,我(认为我)理解明显的问题,但是还有其他不良/邪恶后果吗?代码如下所示:

NSError *sphericErr;
double sphericValue= [densityForThickness: mixThickness error:&sphericErr];
if (NAN == sphericValue) {
    // advise user of the error using NSError class messages
}

感谢所有评论。谢谢!

首先,NAN == sphericValue 永远不会是真的。NaN 与任何数字(包括 NaN)相比都不同。if (sphericValue != sphericValue) 可以很好地检测 NaN。

之所以应该返回一个指示错误的值,并通过指针传递 NSError*,是因为 NSError* 指针是可选的。调用方应该能够调用您的方法传递错误:NULL。如果调用方只是传递从自己的调用方接收的另一个 NSError**,则这一点尤其重要。因此,您需要除 NSError* 之外的某种方法来指示存在错误。

您可以按照建议使用返回值,除非您想要返回 NaN 而不会出错,则会遇到麻烦。因此,您可以考虑返回一个布尔值,并将一个双精度*和一个指向NSError*的指针传递给一个。

如果您打开所有警告,则编译器很可能会执行Apple确实不希望您执行的操作。

最新更新