检查 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
变量以了解原因。
苹果已经声明你应该检查方法的返回值,只有当这是NO
或nil
时你才能检查错误,
因为 SDK 可能会在 error
变量中添加一些奇怪的值。
见文档Programming with Objective-C - Dealing with Errors
【讨论】:
【参考方案3】:定义“足够”。为了什么?
约定的约定是,如果出现问题,则应返回 NO
,如果您传入了 NSError
指针,它将被填充。如果你想对错误做点什么,你必须检查它,但约定说永远不会出现提供错误但返回YES
的情况(如果返回YES
,则指针应该' t 甚至被触摸),或者返回 NO
并且没有错误。这种约定在 Cocoa 中无处不在,并且几十年来一直很稳定,而且由于 Swift 只是基于这种模型进行错误处理,我认为这不太可能改变。
【讨论】:
一个澄清,虽然:如果直接返回值为“成功”,约定不保证错误指针将为nil
。因此,您不应使用错误对象的存在来确定该方法是否成功。
好点,我更新了我的答案,提到当YES
是返回值时,该方法根本不应该考虑错误指针。【参考方案4】:
这两种情况是不同的。这取决于您的要求。
如果您只使用BOOL
,那么您只能获得请求的状态。无论是失败还是成功,你都可以执行任务。但是你将无法知道错误是什么。
要知道究竟是什么错误,您应该使用第一种方法。如果你想知道。
【讨论】:
以上是关于检查 BOOL 状态是不是足够,或者我们也应该检查错误?的主要内容,如果未能解决你的问题,请参考以下文章