错误抛出 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 中可用。
我修改了 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 中可用。