是否足以检查BOOL状态还是我们应该检查错误吗?

时间:2015-09-08 11:10:13

标签: ios objective-c ios8 nserror touch-id

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

例如,Follow方法返回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];

够了吗?

4 个答案:

答案 0 :(得分:3)

这里的文件清楚地描述了这一点; 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

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

答案 1 :(得分:1)

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

Apple已声明您应该检查方法的返回值,并且只有在NOnil时才能检查错误, 因为SDK可能会在error变量中添加一些奇怪的值。

请参阅文档Programming with Objective-C - Dealing with Errors

答案 2 :(得分:1)

定义"足够"。为了什么?

该约定的合同是,如果出现问题,则应返回NO,如果您传入NSError指针,则会填充它。如果你想对错误做一些事情,你必须检查它,但是惯例说明永远不会出现提供错误但返回YES的情况(如果YES返回指针不应该被触摸,或者返回NO并且没有错误。这个约定在Cocoa中无处不在,并且已经稳定了几十年,而且由于Swift只是基于这个模型的错误处理,我认为这更不可能改变。

答案 3 :(得分:0)

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

如果仅使用BOOL,则只能获取请求的状态。无论是失败还是成功,并且基于此,您都可以执行任务。但是您无法知道错误是什么。

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