Können @Observable -Eigenschaftsänderungen außerhalb von Ansichten beobachtet werden?
Posted: 01 Feb 2025, 08:58
Ich habe ein einfaches Mikrofon , das @Observable entspricht, wobei öffentliche Eigenschaften, die Wiederholungen für einige Swiftui -Ansichten auslösen. Aber ich möchte auch, dass diese Eigenschaften Änderungen zur Auslöser der Logik in Nichts s, z. Spracherkennung starten oder stoppen. < /p>
Vor der Einführung von @Observable in iOS 17 würde das Mikrofon ObservableObject implementieren, und seine Eigenschaften würden @Published werden , also nicht s könnte Sink () auf ihnen aufrufen, um Updates zu erhalten. Aber jetzt scheint es keine Möglichkeit zu tun, dies zu tun. Fehler:
>
.../microphon.swift kann den Wert des Typs 'Referenzschreiberkrophon ' auf erwartete Argumenttyp 'ReferenzwritableKeypath ' < /p>
/var/folders/zl/9mrxbhjd0kxfj1763408zfh80000gq/T/swift-generated-sources/@_swiftmacro_10CDAFMobile10MicrophoneC5state18ObservationTrackedfMp .Swift: 1: 46 Ungültige Neuausrichtung der synthetisierten Eigenschaft '_State'
Der synthetisierte Code weist darauf hin, dass ich den Status deklarieren kann Eigenschaft als beide @published und @observationigned . Jetzt kompiliert es, aber es ist unklar, ob dies immer noch dazu führt, dass die Ansichten aktualisiert werden. Gibt es eine bessere Möglichkeit, damit umzugehen?
Code: Select all
View
Code: Select all
@Observable public class Microphone: NSObject {
public enum State: String {
case muted
case off
case on
case starting
}
public var state: State = .off
}
Code: Select all
View
>
.../microphon.swift kann den Wert des Typs 'Referenzschreiberkrophon ' auf erwartete Argumenttyp 'ReferenzwritableKeypath ' < /p>
/var/folders/zl/9mrxbhjd0kxfj1763408zfh80000gq/T/swift-generated-sources/@_swiftmacro_10CDAFMobile10MicrophoneC5state18ObservationTrackedfMp .Swift: 1: 46 Ungültige Neuausrichtung der synthetisierten Eigenschaft '_State'
Der synthetisierte Code weist darauf hin, dass ich den Status deklarieren kann Eigenschaft als beide @published und @observationigned . Jetzt kompiliert es, aber es ist unklar, ob dies immer noch dazu führt, dass die Ansichten aktualisiert werden. Gibt es eine bessere Möglichkeit, damit umzugehen?