#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 просто считывает байты из памяти, поэтому разработчик несет ответственность за подсчет битов .