ObjC错误抛出函数returns()而不是BOOL

时间:2015-10-03 21:40:52

标签: objective-c error-handling try-catch return-value swift2

我有一个Objective C函数声明为:

+ (BOOL)isScanningUnsupported:(NSError **)error;

如果它返回true,我必须在我从(Swift)调用它的函数中返回nil。

所以我打电话给这样:

 var isUnsupported = false

 do { try  isUnsupported = PPCoordinator.isScanningUnsupported()
 } catch let error { throw error }

 if isUnsupported {return nil }

但它告诉我:

  

无法指定类型'()'的值价值为' Bool'

在Objective C中,它被称为:

if ([PPCoordinator isScanningUnsupported:error]) {
    return nil;
}

我该怎么办?

3 个答案:

答案 0 :(得分:4)

您正在描述在Swift中解释在Objective-C中产生错误的函数的标准方法。 Objective-C中接受错误指针并返回BOOL的方法被假定为void并默认抛出Swift。

这是因为它几乎总是在Objective-C中意味着什么。 ie表示“成功运行”,false表示“失败,我将错误放在您提供的指针中”。

您的方法不符合正常的Objective-C约定,因此您可以尝试在PPCoordinator.isScanningUnsupported的声明中禁用Swift转换为使用NS_SWIFT_NOTHROW宏的抛出函数。

答案 1 :(得分:1)

我想你想要:

.index{
   height: 100%;
   background-image: url("../images/index-bg.jpg");
   background-size: cover;
   background-repeat: no-repeat;
}

如果你看一下函数的Swift定义,我会期望没有返回值(即void)。

答案 2 :(得分:0)

这对我现在有用了:

    if let _ = try? PPCoordinator.isScanningUnsupported() { return nil }