Diese Frage wird von Grund auf neu bearbeitet. Nach vielen Versuchen stelle ich fest, dass das Hauptproblem darin besteht, ein Protokoll zu entwerfen, das garantiert, dass eine Hook-Funktion ausgeführt wird, bevor auf ihre bestimmte Eigenschaft zugegriffen wird.Wie erzwinge ich eine Hook-Funktion in einem Eigenschaften-Getter?
protocol Foo {
var bar: Int { get }
func hook()
}
Und ich möchte, dass die folgenden Test bestehen:
func testBarGetterShouldInvokeHooker() {
class DummyFoo: Foo {
var bar: Int = 0
var invoked: Bool = false
func hook() {
invoked = true
}
}
let foo = DummyFoo()
_ = foo.bar
XCTAssertTrue(foo.invoked)
}
Ja, ich möchte, dass Hook-Funktion automatisch angeschlossen werden, das ist - nicht auf die Umsetzung struct unter Berufung/Klasse Haken es explizit.
Ich denke, dass dies durch das Schreiben einiger schöner Erweiterungen erreicht werden könnte.
Ich bin mir bewusst, dass es keine 'Haken()' Anruf in meinem Code, dass die Frage ist, kann ich‘ t herauszufinden, wie man die richtige Erweiterung schreibt, die eine Dummy-Implementierung wie die in der Testmethode garantiert, hat auch die Funktion zum automatischen Einhaken. Was Ihre Antwort angeht, kann man die Methode 'getBarValue' direkt aufrufen, um 'hook' aufzurufen. –
@NandiinBao Sie müssen diesen Wert von irgendwo bekommen, und es muss öffentlich sein. –