Как использовать try с data.withUnsafeBytes() в Swift 5, Swift5?

#xcode #try-catch #swift5 #xcode12

#xcode #попробуйте-поймайте #swift5 #xcode12

Вопрос:

Если я нажимаю на опцию withUnsafeBytes в своем коде, в объявлении указано, что функция выдает:

 func withUnsafeBytes<R>(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R
  

Когда я вставляю, попробуйте catch в моем коде (см. Ниже) Я получаю предупреждение за попытку:

В выражении ‘try’ не происходит вызовов функций, вызывающих выбрасывание

и соответствующее предупреждение для улова:

Блок ‘catch’ недоступен, потому что в блоке ‘do’ не возникает ошибок

Мой код неверен или это проблема с Xcode?

 func getIntValue(data:Data)->Int
{
    var d = -1
    
    do {
        d = try data.withUnsafeBytes {
            $0.load(as: Int.self)
        }
        
    } catch {
        return d
    }
    return d
}
  

Ваш вклад приветствуется.

Ответ №1:

throws -> rethrows Синтаксис выполняет следующее:

  • Если код в теле замыкания содержит выбрасывающую функцию, ошибка повторяется, и вам нужно добавить try
  • Если нет функции выбрасывания, ничего не происходит, и вы не должны использовать try .

В вашем примере происходит второй случай, поэтому удалите try и do - catch блок

Комментарии:

1. Вы случайно не знаете, есть ли что-то вроде load, которое выдает ошибки, или программист должен подсчитать биты и убедиться, что данные правильно отформатированы для типа, в который они преобразуются? Извините, у меня нет очков, чтобы проголосовать за ваш ответ, но спасибо!

2. Ошибок нет, потому load что API просто считывает байты из памяти, поэтому разработчик несет ответственность за подсчет битов .