@@ -9,12 +9,11 @@ struct Wrapper<T> {
9
9
init ( stored: T ) {
10
10
self . _stored = stored
11
11
}
12
-
12
+
13
13
var wrappedValue : T {
14
14
get { _stored }
15
15
set { _stored = newValue }
16
16
}
17
-
18
17
}
19
18
20
19
@propertyWrapper
@@ -837,6 +836,42 @@ struct UsesExplicitClosures {
837
836
var y : Int
838
837
}
839
838
839
+ // ---------------------------------------------------------------------------
840
+ // Enclosing instance diagnostics
841
+ // ---------------------------------------------------------------------------
842
+ @propertyWrapper
843
+ struct Observable < Value> {
844
+ private var stored : Value
845
+
846
+ init ( wrappedValue: Value ) {
847
+ self . stored = wrappedValue
848
+ }
849
+
850
+ @available ( * , unavailable, message: " must be in a class " )
851
+ var wrappedValue : Value { // expected-note{{'wrappedValue' has been explicitly marked unavailable here}}
852
+ get { fatalError ( " called wrappedValue getter " ) }
853
+ set { fatalError ( " called wrappedValue setter " ) }
854
+ }
855
+
856
+ static subscript< EnclosingSelf> (
857
+ _enclosingInstance observed: EnclosingSelf ,
858
+ wrapped wrappedKeyPath: ReferenceWritableKeyPath < EnclosingSelf , Value > ,
859
+ storage storageKeyPath: ReferenceWritableKeyPath < EnclosingSelf , Self >
860
+ ) -> Value {
861
+ get {
862
+ observed [ keyPath: storageKeyPath] . stored
863
+ }
864
+ set {
865
+ observed [ keyPath: storageKeyPath] . stored = newValue
866
+ }
867
+ }
868
+ }
869
+
870
+ struct MyObservedValueType {
871
+ @Observable // expected-error{{'wrappedValue' is unavailable: must be in a class}}
872
+ var observedProperty = 17
873
+ }
874
+
840
875
// ---------------------------------------------------------------------------
841
876
// Miscellaneous bugs
842
877
// ---------------------------------------------------------------------------
0 commit comments