【问题标题】: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];

够了吗?

【问题讨论】:

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


    【解决方案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,那么您只能获得请求的状态。无论是失败还是成功,你都可以执行任务。但是你将无法知道错误是什么。

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

        【讨论】:

          猜你喜欢
          • 2020-03-07
          • 2018-12-21
          • 2015-01-13
          • 1970-01-01
          • 2016-03-29
          • 1970-01-01
          相关资源
          最近更新 更多