Общие вопросы
Смешанные вопросы по Swift.
Открыть разделБаза Hintsage
Язык Swift и разработка приложений в экосистеме Apple.
Темы раздела
Смешанные вопросы по Swift.
Открыть разделТипы, функции, структуры, классы и базовая семантика.
Открыть разделOptionals, value/reference semantics, casting и pattern matching.
Открыть разделProtocols, extensions, associated types и generic constraints.
Открыть разделCollections, closures, map/filter/reduce и sequences.
Открыть разделARC, reference cycles, weak/unowned и время жизни объектов.
Открыть разделasync/await, actors, tasks и безопасность данных.
Открыть разделthrows, Result, defer и моделирование ошибок.
Открыть разделПрактика
Согласуется ли одновременный вызов next() у одного AsyncIterator из нескольких задач с контрактом Swift?
В публичном API результат операции должен передаваться как значение успеха или ошибки без немедленного перехвата: какой механизм Swift подходит для этого случая?
При каком условии функция с rethrows может завершиться ошибкой?
Что теряет вызывающий код при замене обработки ошибки оператором try??
Как передать ошибку вызывающему коду, не обрабатывая её на текущем уровне?
Спрогнозируйте, какой обработчик выполнится при вызове charge(), и объясните роль динамического типа ошибки.
enum PaymentError: Error {
case declined(reason: String)
case unavailable
}
func charge() throws {
let error: Error = PaymentError.declined(reason: "limit")
throw error
}
do {
try charge()
} catch PaymentError.declined(let reason) where reason == "limit" {
print(" лимит")
} catch PaymentError.declined {
print("отклонено")
} catch {
print("другая ошибка")
}
Практическая ситуация: бросающую функцию нужно представить как Result. Какой результат создаст этот код и за счёт какого механизма ошибка попадёт в failure?
enum LoadError: Error {
case offline
}
func load() throws -> Int {
throw LoadError.offline
}
let result = Result { try load() }
Как завершится программа, если выражение с try! выбросит ошибку?
Функция возвращает именованный результат, а defer изменяет его перед выходом: какое значение получит вызывающий код?
Практическая ситуация: замыкание может выбросить ошибку, но API принимает только невыбрасывающую функцию. Какое ограничение Swift проявится при передаче такого замыкания?
Сравнение: какое ограничение типизации ошибок есть у throws, но отсутствует у Result?
Что гарантированно произойдёт с defer, если функция завершится через fatalError?
Вызов бросающей функции внутри defer без локального перехвата: что потребует компилятор Swift?
При добавлении контекста к исходной ошибке в Swift какой способ позволит сохранить её причину для диагностики?
Представьте, что компилятор отклоняет Result, в котором в качестве ошибки указан собственный тип без специального протокола. Какое требование нарушено?
Внутри обработчика ошибки выполняется операция, которая тоже выбрасывает ошибку: какая ошибка выйдет из внешнего блока обработки?
В Swift 6 публичная функция объявлена с типизированным throws: какое ограничение на выбрасываемые ошибки получает вызывающий код?
Как смоделировать результат валидации нескольких полей так, чтобы клиент получил все ошибки за один проход, а не только первую?
Практическая ситуация: слой API получил Result, а вызывающий код работает через throws. Как преобразовать Result в выбрасывающий вызов без потери исходной ошибки?
В каком порядке выполняются несколько defer в одной области видимости при выходе из неё?
Показано 601–620 из 651