getBytes
(copyBytes
)을 사용하여 바이트를 읽는 데 NSData
(또는 Data
)을 사용하면 NSRangeException을 throw 할 수 있습니다. 나는 그들을 붙잡는 법을 모른다.NSData (데이터) 범위 예외 처리
나는 NSData
포함 NS
클래스를 들면, 나는 예외를 잡아서 처리하기 위해 목표 - 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")
}
참고 : 문제의 코드는 (스위프트가 사람들을 처리 할 수 없기 때문에, 예상대로)이 경고를 표시하지만 그 블록을 try...catch
블록에 추가하여 사용하고 싶은 것을 보여줍니다. 던지는 기능에
된 통화는
'데이터 copyBytes'는 던지지 않으므로 잡을 것이 없습니다. – rmaddy
@rmaddy 글쎄, 그게 문제의 핵심이야. 그것은 던지지 않지만 응용 프로그램이 충돌합니다. Objective-C에 기대는 것은 경마장에 3 개의 다리가 달린 마차가있는 것과 같습니다 ...이 문제를 해결할 방법이 있습니까? copyBates를 사용하는 것이 필수적인 것은 아닙니다. 이는 그것이 제공하는 기능에 관한 것입니다. –
'NSRangeException'은'do-try-catch' 흐름으로 런타임에 잡힐 수 없습니다. 프로그래밍 오류입니다. 컬렉션 유형 범위를 벗어납니다. – JAL