getBytes
(copyBytes
)を使用してバイトを読み取るためにNSData
(またはData
)を使用すると、NSRangeExceptionがスローされます。私はそれらを捉える方法を知らない。NSData(データ)範囲例外の処理
私はNSData
含めNS
クラスのために、私は例外をキャッチして処理するためのObjective-Cラッパーを使用する必要がありますが、私はData
もスウィフトがネイティブで処理できない例外をスローすることを見て少し驚いていることを知っています。
明らかなものがありませんか?純粋なスウィフトを使ってそれらを捕まえる方法はありますか?または、迅速な処理可能なエラーをスローする他の方法がありますか? (実際に私は、ファイルから作成されたデータを使用しています)失敗し
コード例は
// Using NSData
let dataBytes:[UInt8] = [0xff, 0x00, 0x11, 0x22]
let data = NSData(bytes: dataBytes, length: dataBytes.count)
let dataRange = NSRange(location: 2, length: 4)
var result = [UInt8](repeating: 0, count: 4)
do
{
try data.getBytes(&result, range: dataRange)
print("OK")
}
catch
{
print("FAIL")
}
// Using Data
let dataBytes:[UInt8] = [0xff, 0x00, 0x11, 0x22]
let data = Data(dataBytes)
let dataRange = Range(2..<6)
var result = [UInt8](repeating: 0, count: 4)
do
{
try data.copyBytes(to: &result, from: dataRange)
print("OK")
}
catch
{
print("FAIL")
}
注:問題のコードは、(スウィフトはそれらを処理できないので、期待通りに)2回の警告を示すが、Iそれらをtry...catch
ブロックに追加して、私が使いたいものを表示するだけです。投げ機能へ
ませ呼び出しが
'Data copyBytes'はスローしないので、キャッチするものはありません。 – rmaddy
@rmaddyそれは問題の要点です。それはスローされませんが、アプリをクラッシュさせます。 Objective-Cに傾倒することは、レーストラックに3馬の馬を持つようなものです...これを回避する方法はありますか? copyBatesの使用は必須ではありません。それは、それが提供する機能です。 –
'NSRangeException'は実行時に' do-try-catch'フローで捕らえられません。プログラミングエラーです。あなたはコレクション型の範囲外に出ています。 – JAL