当一个方法同时返回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];
够了吗?
答案 0 :(得分:3)
返回值
true
如果可以评估政策,则false
。参数
policy
要评估的政策error
在输入时,指向错误对象的指针。如果发生错误,则将此指针设置为包含错误信息的实际错误对象。如果您不想要错误信息,可以为此参数指定nil
。
因此,这意味着布尔返回值会告诉您评估是否成功。如果失败,将设置您的错误对象,其中将包含有关失败的描述。
答案 1 :(得分:1)
不,检查返回值应该足够了。但是当返回NO
时,您可以查看error
变量以了解原因。
Apple已声明您应该检查方法的返回值,并且只有在NO
或nil
时才能检查错误,
因为SDK可能会在error
变量中添加一些奇怪的值。
答案 2 :(得分:1)
定义"足够"。为了什么?
该约定的合同是,如果出现问题,则应返回NO
,如果您传入NSError
指针,则会填充它。如果你想对错误做一些事情,你必须检查它,但是惯例说明永远不会出现提供错误但返回YES
的情况(如果YES
返回指针不应该被触摸,或者返回NO
并且没有错误。这个约定在Cocoa中无处不在,并且已经稳定了几十年,而且由于Swift只是基于这个模型的错误处理,我认为这更不可能改变。
答案 3 :(得分:0)
两种情况都不同。这取决于您的要求。
如果仅使用BOOL
,则只能获取请求的状态。无论是失败还是成功,并且基于此,您都可以执行任务。但是您无法知道错误是什么。
要知道错误是什么,你应该使用第一种方法。如果你想知道。