Как получить доступ к объекту, изолированному от актора?

Я пытаюсь проверить поведение актера. Это новая функция, предоставляемая 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, они, похоже, не поддерживают actors на момент написания (бета 1).

      let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
async {
    print(await logger.max)
    // Prints "25"
}
Другие вопросы по тегам