Общие вопросы
Смешанные вопросы по 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 и моделирование ошибок.
Открыть разделПрактика
Разберите, в какой момент выполняется defer в теле цикла и какой будет вывод программы:
for index in 1...2 {
defer { print("cleanup \(index)") }
print("work \(index)")
}
print("finished")
Как адаптировать тип ошибки в Result к доменному типу, сохранив значение успешного результата?
Если тело defer обращается к изменяемой локальной переменной, какое значение оно использует при выполнении?
Практическая ситуация: API принимает замыкание с throws, а у вас есть обычное невыбрасывающее замыкание. Допустима ли такая передача и почему?
Можно ли в Swift повторно выбросить перехваченную ошибку без явного указания значения?
При вызове async throws-функции как изменяется поток выполнения, если она выбрасывает ошибку после await?
В приложении одну ошибку нужно надёжно классифицировать программно и одновременно локализованно показать пользователю. Как разделить эти две задачи в модели ошибки Swift?
Разберите ошибку компиляции: почему Error нельзя сравнить через ==, хотя конкретный тип ошибки поддерживает Equatable?
enum NetworkError: Error, Equatable {
case timeout
}
let actual: Error = NetworkError.timeout
let expected: Error = NetworkError.timeout
if actual == expected {
print("ошибки равны")
}
Публичная Swift-библиотека должна передавать доменные ошибки в Objective-C-код с устойчивыми кодами. Как смоделировать такую ошибку?
Во время проектирования слоя синхронизации как выразить в модели ошибки, что сбой можно безопасно повторить, не анализируя текст?
В Swift 5 и новее какой тип имеет результат try? для бросающей функции, возвращающей Int?, и почему?
Цепочка Result должна передать успешное значение в следующую операцию, которая сама может вернуть ошибку. Какой метод нужен, чтобы не получить вложенный Result?
В блоке do-catch общий обработчик расположен перед обработчиком конкретной ошибки. Как это влияет на достижимость последнего обработчика?
Объясните механизм регистрации defer: будет ли он выполнен, если выполнение вышло из области до достижения объявления?
Представьте API, где ошибка возвращается как Result: обязан ли вызывающий код обработать failure так же строго, как ошибку из throws?
Как типизировать Result, если операция гарантированно не может завершиться ошибкой?
В цепочке Result нужно восстановиться только после ошибки, превратив её в успешное значение. Какой механизм Swift позволяет сделать это без перехвата ошибки?
В выражении с несколькими потенциально выбрасывающими вызовами где должна находиться отметка try, чтобы компилятор разрешил всё выражение?
Для ошибки, которую пользователь может исправить выбором действия, какой контракт Swift позволяет описать варианты восстановления?
Может ли бросающая реализация удовлетворить требование протокола с невыбрасывающим методом?
Показано 621–640 из 651