Swift 处理NSData(数据)范围异常

Swift 处理NSData(数据)范围异常,swift,exception-handling,swift3,nsdata,Swift,Exception Handling,Swift3,Nsdata,使用NSData(或Data)读取字节使用getBytes(copyBytes)可能引发NSRangeException。我不知道怎么抓住他们 我知道对于NS类,包括NSData,我必须使用Objective-C包装器来捕获和处理异常,但我有点惊讶地看到Data也抛出Swift本机无法处理的异常 我错过了什么明显的东西吗?有没有办法用纯Swift抓到那些人?或者有没有其他方法抛出快速可处理的错误 失败的代码示例(实际上我使用的是从文件创建的数据) //使用NSData let数据字节:[UInt

使用
NSData
(或
Data
)读取字节使用
getBytes
copyBytes
)可能引发NSRangeException。我不知道怎么抓住他们

我知道对于
NS
类,包括
NSData
,我必须使用Objective-C包装器来捕获和处理异常,但我有点惊讶地看到
Data
也抛出Swift本机无法处理的异常

我错过了什么明显的东西吗?有没有办法用纯Swift抓到那些人?或者有没有其他方法抛出快速可处理的错误

失败的代码示例(实际上我使用的是从文件创建的数据)

//使用NSData
let数据字节:[UInt8]=[0xff,0x00,0x11,0x22]
let data=NSData(字节:数据字节,长度:数据字节.计数)
让dataRange=NSRange(位置:2,长度:4)
变量结果=[UInt8](重复:0,计数:4)
做
{
try data.getBytes(&结果,范围:dataRange)
打印(“确定”)
}
抓住
{
打印(“失败”)
}
//使用数据
let数据字节:[UInt8]=[0xff,0x00,0x11,0x22]
让数据=数据(数据字节)

让dataRange=Range(2..您需要检查您正在使用的范围的上索引是否超出数据的范围:

if dataRange.upperBound <= data.count {
    data.copyBytes(to: &result, from: dataRange)
}

如果dataRange.upperBound您需要检查所使用范围的上限索引是否超出数据的范围:

if dataRange.upperBound <= data.count {
    data.copyBytes(to: &result, from: dataRange)
}

如果dataRange.upperBound
Data copyBytes
没有抛出,那么就没有什么可捕捉的了。@rmaddy好吧,这是问题的关键。它没有抛出,但会使应用程序崩溃。依靠Objective-C就像在赛道上有一匹三条腿的马……有办法解决这个问题吗?使用copyBates不是必须的,而是功能性的它提供的属性。
NSRangeException
无法在运行时使用
do try catch
流捕获。这是一个编程错误,超出了集合类型的范围。如果不捕获异常,则使用适当的
if
语句阻止它。@rmaddy好的,谢谢……这不是我想要听到的答案,而是一个错误至少我现在知道了我的选择。
数据copyBytes
不会抛出,所以没有什么可捕捉的。@rmaddy好吧,这是问题的关键。它不会抛出,但会使应用程序崩溃。依靠Objective-C就像在赛道上有一匹三条腿的马……有办法解决这个问题吗?使用copyBates不是必须的,而是功能性的它提供的属性。
NSRangeException
无法在运行时使用
do try catch
流捕获。这是一个编程错误,超出了集合类型的范围。如果不捕获异常,则使用适当的
if
语句阻止它。@rmaddy好的,谢谢……这不是我想要听到的答案,而是一个错误至少我现在知道我的选择了。