File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change
1
+ // RUN: %target-run-simple-swift
2
+ // REQUIRES: executable_test
3
+
4
+ private protocol AnyChangeTracker {
5
+ var myVariable : Any ? { get }
6
+ var isModified : Bool { get }
7
+ }
8
+
9
+ protocol ChangeTrackerType {
10
+ associatedtype Value
11
+ var originalValue : Value { get }
12
+ var value : Value { get set }
13
+ var isModified : Bool { get }
14
+ }
15
+
16
+ extension ChangeTrackerType where Value: Equatable {
17
+ var isModified : Bool {
18
+ return value != originalValue
19
+ }
20
+ }
21
+
22
+ struct ChangeTracker < T: Equatable > : ChangeTrackerType {
23
+ let originalValue : T
24
+ var value : T
25
+
26
+ init ( value: T ) {
27
+ originalValue = value
28
+ self . value = value
29
+ }
30
+ }
31
+
32
+ extension ChangeTracker : AnyChangeTracker where Value: OptionalType , Value. Wrapped: Equatable {
33
+ var myVariable : Any ? {
34
+ return value
35
+ }
36
+ }
37
+
38
+ protocol OptionalType {
39
+ associatedtype Wrapped
40
+ var value : Wrapped ? { get }
41
+ }
42
+
43
+ extension Optional : OptionalType {
44
+ var value : Wrapped ? {
45
+ return self
46
+ }
47
+ }
48
+
49
+ let s : Any = ChangeTracker < String ? > ( value: " Foo " )
50
+
51
+ guard let s = s as? AnyChangeTracker else {
52
+ fatalError ( " Does not comply to AnyChangeTracker " )
53
+ }
54
+
55
+ let myVar = String ( describing: s. myVariable ?? " nil " )
56
+ assert ( myVar == " Optional( \" Foo \" ) " )
57
+
You can’t perform that action at this time.
0 commit comments