Den*_*hin 24 swift swift5 xcode13 swift-concurrency
我试图检查演员的行为。这是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"
Run Code Online (Sandbox Code Playgroud)
但我的编译器在这个例子中失败了:
斯威夫特编译器错误:
不支持并发的函数中的“await”
Actor 隔离属性“max”只能从 Actor 内部引用
那么如何访问与参与者隔离的属性呢?
也许这是编译器或示例代码中的错误?
Xcode 版本 13.0 测试版 (13A5154h) Swift 版本 5.5
Bra*_*key 23
将访问权限放在一个Task
块中。Actor 隔离属性通过“协作线程池”同步和强制执行独占访问,并且可以挂起,因此需要异步运行。
let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
Task {
print(await logger.max)
// Prints "25"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25615 次 |
最近记录: |