我修改了objective C中的一个函数来抛出错误。然后我想在Swift中捕获这些错误。我实现了桥接函数,看起来一切都井然有序。我得到错误:
一行中连续的语句必须用';'分隔
就在命令后面:
try rfduino.send(data)
如果我不使用try
,它开始要求我输入第二个参数。在我实现此错误处理之前,该函数工作。我使用XCode 6.4。
我也读了http://blog.benjamin-encz.de/swift-error-handling-and-objective-c-interop-in-depth/当函数返回BOOL或objective - c类型时,XCode只将该函数转换为类似swift的错误抛出函数。我也试过了。
会是什么呢?
我的。h文件看起来像:
- (BOOL)send:(NSData *)data
error:(NSError**) errorPtr;
:
- (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中可用。