objective-c - XCode 6.4 抛出未将 Objective-C 函数转换为 Swift 的错误

标签 objective-c swift error-handling try-catch throw

我修改了 Objective C 中的一个函数来引发错误。然后我想在 Swift 中捕获这些错误。我实现了桥接功能,看起来一切正常。我收到错误:

Consecutive statements on a line must be separated by ';'

紧接在命令之后:

try rfduino.send(data)

如果我不使用try,它就会开始询问我第二个参数。在我实现此错误处理之前,该函数就起作用了。我正在使用 XCode 6.4。

我还读过 http://blog.benjamin-encz.de/swift-error-handling-and-objective-c-interop-in-depth/ 当函数返回 BOOL 或 ObjectiveC 类型时,XCode 仅将函数转换为类似 Swift 的错误抛出函数。我也尝试过。

它可能是什么?

我的 .h 文件如下所示:

- (BOOL)send:(NSData *)data
       error:(NSError**) errorPtr;

在 .m 文件中:

- (BOOL)send:(NSData *)data
       error:(NSError**)errorPtr
{
    if (! loadedService) {

        if (errorPtr) {
            *errorPtr = [NSError errorWithDomain:NSCocoaErrorDomain
                                            code:NSFileNoSuchFileError
                                        userInfo:@{NSLocalizedDescriptionKey:  NSLocalizedString(@"No Device Connected.", nil),
                                                   NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The connection is not loaded.", nil),
                                                   NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Try disconnecting and connecting again", nil)
                                                   }];
        } else {
            @throw [NSException exceptionWithName:@"sendDataNoDevice" reason:@"please wait for ready callback" userInfo:nil];
        }
        return(NO);
    }

    if ([data length] > max_data) {
        if (errorPtr) {
            *errorPtr = [NSError errorWithDomain:NSCocoaErrorDomain
                                            code:NSFileNoSuchFileError
                                        userInfo:@{NSLocalizedDescriptionKey:  NSLocalizedString(@"No Device Connected.", nil),
                                                   NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The connection is not loaded.", nil),
                                                   NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Try disconnecting and connecting again", nil)
                                                   }];
        } else {
            @throw [NSException exceptionWithName:@"sendDataTooLarge" reason:@"max data size exceeded" userInfo:nil];
        }
        return(NO);
    }

    [peripheral writeValue:data forCharacteristic:send_characteristic type:CBCharacteristicWriteWithoutResponse];
    return(YES);
}

谢谢!

最佳答案

您必须更新 Xcode。

连续语句...通常在 Xcode 不理解语法时出现:实际上 do try catch 仅在带有 Swift 2 的 Xcode 7+ 中可用。

关于objective-c - XCode 6.4 抛出未将 Objective-C 函数转换为 Swift 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635848/

相关文章:

从核心数据加载的 iPhone UIImage 逆时针旋转 90 度。怎么修?

ios - Mapbox iOS SDK 动态样式坐标边界崩溃

ios - 如何确定用户使用应用程序的时长 (swift4)

html - : "" 之后的词法错误 <EOF>

ios - ReplayKit - 在 ObjectiveC 中保留对 RPPreviewViewController 的引用

ios - 类型转换,为什么这么冗长?还是我做错了什么?

ios - 增强现实测量 - iPhone

ios - 使用物理体创建 SKSprite 节点的函数

php - PHP通知抑制

c# - NLog文件的自定义文件名