Как получить доступ к объекту, изолированному от актора?
Я пытаюсь проверить поведение актера. Это новая функция, предоставляемая Swift5.5.
Я создал игровую площадку с примером кода из официальной документации swift.org:
import Foundation
actor TemperatureLogger {
let label: String
var measurements: [Int]
private(set) var max: Int
init(label: String, measurement: Int) {
self.label = label
self.measurements = [measurement]
self.max = measurement
}
}
let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
print(await logger.max)
// Prints "25"
Но мой компилятор не работает в этом примере:
Ошибка компилятора Swift:
'await' в функции, не поддерживающей параллелизм
На изолированное от актора свойство "max" можно ссылаться только изнутри актера.
Итак, как получить доступ к свойству, изолированному от актора?
Может это ошибка в компиляторе или в коде примера?
Xcode версии 13.0 бета (13A5154h)Swift версии 5.5
1 ответ
Поместите доступ в
async
блокировать. Изолированные свойства актора синхронизируются и обеспечивают монопольный доступ через «кооперативный пул потоков» и могут приостанавливаться, поэтому это должно выполняться асинхронно.
Также не пробуйте пока это на Swift Playground, они, похоже, не поддерживают
actor
s на момент написания (бета 1).
let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
async {
print(await logger.max)
// Prints "25"
}