Общие вопросы
Смешанные вопросы по 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 и моделирование ошибок.
Открыть разделПрактика
Функция запускает обычную Task и сразу возвращает управление: кто отвечает за её отмену?
Представьте не изолированную async-функцию, начавшуюся на главном потоке: обязана ли она продолжить выполнение после await на том же потоке?
При запуске Task.detached из дочерней задачи какое поведение task-local значения нужно ожидать?
Объясните механизм, из-за которого синхронная блокирующая операция внутри async-задачи может остановить прогресс других задач.
Разбор ошибки: почему Swift запрещает параллельным задачам напрямую изменять одну локальную переменную?
Каким образом параметр isolated меняет изоляцию функции, принимающей actor?
Высокоприоритетная задача ожидает завершения низкоприоритетной: какое изменение приоритета может произойти у ожидаемой задачи?
Объясните механизм: зачем вызову синхронного метода actor нужен await?
Разберите ошибку в адаптере callback API: какое нарушение контракта конкурентности произойдёт при выполнении этого кода?
func load() async -> String {
await withCheckedContinuation { continuation in
LegacyAPI.fetch { value in
continuation.resume(returning: value)
continuation.resume(returning: value + "!")
}
}
}
enum LegacyAPI {
static func fetch(_ completion: @escaping (String) -> Void) {
completion("ok")
completion("again")
}
}
Какую гарантию безопасности данных теряет свойство actor после объявления nonisolated(unsafe)?
Как async-обёртка над callback API должна передать отмену родительской задачи в незавершённую операцию?
Объясните, почему вызов async-функции сам по себе не запускает новую задачу.
При выходе из области withTaskGroup все дочерние задачи уже завершены?
В синхронном не изолированном коде вызывается синхронный метод, помеченный @MainActor. Перейдёт ли Swift автоматически на главный актор?
В цикле async-задачи регулярно вызывают Task.yield(): какой гарантии это не даёт?
При объявлении ссылочного типа как @unchecked Sendable какую гарантию безопасности разработчик берёт на себя?
Разберите ограничение: почему actor не может реализовать синхронное требование протокола методом, читающим его изолированное состояние?
За счёт чего actor предотвращает одновременное выполнение изолированных участков на разных задачах?
Практическая ситуация: родительская задача Swift отменена во время выполнения дочерней — какое изменение состояния дочерней задачи происходит автоматически?
В чём практическое отличие withCheckedContinuation от withUnsafeContinuation при адаптации callback API?
Показано 261–280 из 651