В Swift и классы, и actor используются для создания ссылочных типов, но с разными целями. Главное отличие — в потокобезопасности. Actor появились в Swift 5.5 как часть Concurrency.
1️⃣ Классы (class):
🔹 Не потокобезопасны: доступ к свойствам и методам из разных потоков может привести к гонкам данных.
🔹 Поддерживают наследование: можно создавать подклассы.
🔹 Используются для общего состояния: подходят для объектов, которые не требуют синхронизации.
♣️ Пример использования:
class Counter {
var value = 0
func increment() {
value += 1 // Опасность при вызове из разных потоков
}
}
2️⃣ Actor:
🔹 Потокобезопасны: Swift автоматически сериализует доступ к свойствам и методам (очередь задач).
🔹 Нет наследования: нельзя наследовать от actor.
🔹 Для изолированного состояния: идеальны для данных, которые изменяются из разных потоков.
♣️ Пример использования:
actor SafeCounter {
private var value = 0
func increment() {
value += 1 // Безопасно (автоматическая синхронизация)
}
func currentValue() -> Int {
return value
}
}
♣️ Пример работы с Actor:
let counter = SafeCounter()
Task {
await counter.increment()
let value = await counter.currentValue()
print(value) // 1
}
⚠️ Важно:
🔸 Для вызова методов actor нужен await.
🔸 Свойства actor по умолчанию private.
💡 Вывод:
🔹 Классы — для простых объектов без многопоточности.
🔹 Actor — для данных, изменяемых из разных потоков (счетчики, кеши, состояния).
Если нужно потокобезопасное решение — выбирайте actor. Если важна гибкость и наследование — class.
➡️ Подписаться на канал
Мобильный трудоголик