错误抛出 Objective-C 函数未被 XCode 转换为 Swift 6.4

Error throwing Objective-C function not translated to Swift by XCode 6.4

我修改了 objective C 中的一个函数以抛出错误。然后我想在 Swift 中捕获这些错误。我实现了Bridging功能,看起来一切正常。我收到错误:

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/ 当函数 returns 为 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。

Consecutive statements... 通常在 Xcode 不理解语法时出现:实际上 do try catch 仅在 Xcode 7+ 和 Swift 2 中可用。