Code: Select all
protocol TestProtocol {
func testFunction()
}
actor TestClass: TestProtocol {
func testFunction() {
}
}
Aber besteht nicht der ganze Zweck von Actor in der Thread-Sicherheit und der Verhinderung von Datenrennen? Wenn ja, wo ist der Datenwettlauf im obigen Code oder die Protokollkonformität im Allgemeinen?
Bearbeiten: Basierend auf den Antworten von @Sweeper und @paulw11 , hier ist der Code, den ich geschrieben habe, und er stürzt zur Laufzeit mit der Fehlermeldung Falsche Akteur-Executor-Annahme
import Foundation
ab
Code: Select all
protocol TestProtocol {
func increment()
func decrement()
}
actor TestActor: @preconcurrency TestProtocol {
var i = 5
func increment() {
i = i + 1
print("incremented \(i)")
}
func decrement() {
i = i - 1
print("decremented \(i)")
}
}
class TestClass {
let testActor = TestActor()
func g(x: any TestProtocol) {
x.increment() // this synchronously calls an isolated method!
x.decrement()
}
func f() {
print("inside f")
g(x: testActor)
}
}