Einhaltung der Protokolle durch die AkteureIOS

Programmierung für iOS
Guest
 Einhaltung der Protokolle durch die Akteure

Post by Guest »

Was ist der Grund dafür, dass der Swift-Compiler in Bezug auf die Protokollkonformität zu streng ist? Betrachten Sie beispielsweise den folgenden Code:

Code: Select all

protocol TestProtocol {
func testFunction()
}

actor TestClass: TestProtocol {
func testFunction() {

}
}
Der Build schlägt mit der Fehlermeldung fehl, dass die akteurisolierte Instanzmethode „testFunction()“ nicht zur Erfüllung der nichtisolierten Protokollanforderungen verwendet werden kann.
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)
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post