#swift #actor #swift-concurrency
Вопрос:
У меня есть актер:
actor StatesActor {
var job1sActive:Bool = false
...
}
У меня есть объект, который использует этого актера:
class MyObj {
let myStates = StatesActor()
func job1() async {
myStates.job1IsActive = true
}
}
Линия:
myStates.job1IsActive = true
ошибки с этой ошибкой:
Actor-isolated property 'job1IsActive' can not be mutated from a non-isolated context
Как я могу использовать субъекта для правильного хранения/чтения информации о состоянии, чтобы myObj мог использовать ее для чтения и установки состояния?
Комментарии:
1. Создайте функцию в своем актере, которая обновляет свойство. Затем
MyObj
следует вызвать эту функцию.
Ответ №1:
Как я могу использовать субъекта для правильного хранения/чтения информации о состоянии, чтобы myObj мог использовать ее для чтения и установки состояния?
Вы не можете изменять переменные экземпляра субъекта извне субъекта. В этом весь смысл актеров!
Вместо этого дайте субъекту метод, который устанавливает свою собственную переменную экземпляра. Затем вы сможете вызвать этот метод (с await
).
Комментарии:
1. туре. Мне нужно было завернуть это в метод в StatesActor…. спасибо.
2. В основном актер учит вас, как безопасно использовать многопоточность.
3. Теоретически возможны асинхронные установщики свойств. У Свифта их просто еще нет.