检查 BOOL 状态是不是足够,或者我们也应该检查错误?

Posted

技术标签:

【中文标题】检查 BOOL 状态是不是足够,或者我们也应该检查错误?【英文标题】:Is it enough to check for BOOL status or should we check for Error as well?检查 BOOL 状态是否足够,或者我们也应该检查错误? 【发布时间】:2015-09-08 11:10:12 【问题描述】:

当一个方法同时返回一个 BOOL 和 Error 时,是否足以检查 BOOL 状态或者我们是否应该为 Error 添加附加条件?

例如,Following 方法返回 BOOL 和错误(如果有)。

-(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

现在我应该写

 BOOL biometricsAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
    available = (error == nil && biometricsAvailable);

BOOL biometricsAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

够了吗?

【问题讨论】:

【参考方案1】:

这里的文档中有清楚的描述; https://developer.apple.com/library/prerelease/ios/documentation/LocalAuthentication/Reference/LAContext_Class/index.html#//apple_ref/occ/instm/LAContext/canEvaluatePolicy:error:,

返回值

true 如果可以评估策略,则false 否则。

参数

policy 要评估的政策。error 在输入时,指向错误对象的指针。如果发生错误,则将此指针设置为包含错误信息的实际错误对象。如果您不想要错误信息,您可以为此参数指定nil

因此,这意味着布尔返回值会告诉您评估是否成功。如果失败,您的错误对象将被设置,其中将包含有关失败的描述。

【讨论】:

【参考方案2】:

不,检查返回值就足够了。但是当NO 返回时,您可以查看error 变量以了解原因。

苹果已经声明你应该检查方法的返回值,只有当这是NOnil时你才能检查错误, 因为 SDK 可能会在 error 变量中添加一些奇怪的值。

见文档Programming with Objective-C - Dealing with Errors

【讨论】:

【参考方案3】:

定义“足够”。为了什么?

约定的约定是,如果出现问题,则应返回 NO,如果您传入了 NSError 指针,它将被填充。如果你想对错误做点什么,你必须检查它,但约定说永远不会出现提供错误但返回YES的情况(如果返回YES,则指针应该' t 甚至被触摸),或者返回 NO 并且没有错误。这种约定在 Cocoa 中无处不在,并且几十年来一直很稳定,而且由于 Swift 只是基于这种模型进行错误处理,我认为这不太可能改变。

【讨论】:

一个澄清,虽然:如果直接返回值为“成功”,约定不保证错误指针将为nil。因此,您不应使用错误对象的存在来确定该方法是否成功。 好点,我更新了我的答案,提到当YES 是返回值时,该方法根本不应该考虑错误指针。【参考方案4】:

这两种情况是不同的。这取决于您的要求。

如果您只使用BOOL,那么您只能获得请求的状态。无论是失败还是成功,你都可以执行任务。但是你将无法知道错误是什么。

要知道究竟是什么错误,您应该使用第一种方法。如果你想知道。

【讨论】:

以上是关于检查 BOOL 状态是不是足够,或者我们也应该检查错误?的主要内容,如果未能解决你的问题,请参考以下文章

在加载页面 cakephp 时检查字段天气是不是过期

kafka消费者状态检查—消费的offset是不是滞后/堆积

我如何检查数组是不是有对象[关闭]

索引键是不是足够或者我应该添加外键

我应该啥时候检查互联网连接

如何使用 Flutter future<bool> 检查 Firestore 中是不是存在子集合