Ключевое слово nonisolated явно обозначает метод или свойство актора как не требующие изоляции актора, позволяя вызывать их синхронно из любого контекста без переключения на executor актора.
По умолчанию все члены актора изолированы, то есть должны быть доступны с await из-за пределов актора. Пометив член nonisolated, ты исключаешь его из этого ограничения.
actor UserSession {
let userID: String // immutable, но всё равно изолирован по умолчанию
nonisolated var description: String {
return "Session: \(userID)" // безопасно — доступ только к неизменяемому состоянию
}
}
Компилятор принудительно следит, чтобы nonisolated члены обращались только к:
let) сохранённым свойствамnonisolated членамCustomStringConvertible)Без nonisolated даже простое вычисляемое свойство, возвращающее константу, потребовало бы await, добавляя ненужные затраты. Правильное использование nonisolated:
nonisolated член не может читать или писать изменяемое состояние актора — компилятор это отклонит. Это безопасно только когда доступные данные гарантированно не изменяются после инициализации.
Член nonisolated в акторе может получать доступ к изменяемым сохраняемым свойствам, если эти обращения защищены примитивами синхронизации, такими как locks.
Новый — ещё не проверен сообществом
Вы