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