@Sendable?@Sendable — это атрибут, который помечает замыкание как безопасное для передачи через границы конкурентности, например при передаче его другому актору или таску. Это ключевая часть строгой модели конкурентности Swift, представленной вместе с системой структурированной конкурентности Swift.
Когда ты помечаешь замыкание как @Sendable, компилятор проверяет следующие правила:
Sendablevar из внешней области видимостиfunc performAsync(_ work: @Sendable () -> Void) {
Task { work() }
}
В этом примере компилятор гарантирует, что work не захватывает никакие значения, не соответствующие Sendable, и не захватывает изменяемые значения.
Без @Sendable замыкание могло бы захватить общее изменяемое состояние и выполняться одновременно, что привело бы к гонкам данных. Атрибут @Sendable переносит эту проверку безопасности со времени выполнения на время компиляции, исключая целый класс ошибок конкурентности.
@Sendable применяется к типам замыканий, а не напрямую к структурам или классамSendable для обеспечения потокобезопасностиTask.init и параметров методов акторовАтрибут @Sendable можно применять непосредственно к типам struct и class, чтобы отметить их как потокобезопасные для использования через границы concurrency.
Новый — ещё не проверен сообществом
Вы