@@ -27,6 +27,13 @@ open class StateMachine<State: StateMachineHashable, Event: StateMachineHashable
27
27
public struct Invalid : Error , Equatable { }
28
28
}
29
29
30
+ private struct Observer {
31
+
32
+ weak var object : AnyObject ?
33
+
34
+ let callback : Transition . Callback
35
+ }
36
+
30
37
public typealias Definition = StateMachineTypes . Definition < State , Event , SideEffect >
31
38
32
39
private typealias DefinitionBuilder = StateMachineTypes . DefinitionBuilder
@@ -42,7 +49,7 @@ open class StateMachine<State: StateMachineHashable, Event: StateMachineHashable
42
49
public private( set) var state : State
43
50
44
51
private let states : States
45
- private var observers : [ ( object : ( ) -> AnyObject ? , callback : Transition . Callback ) ] = [ ]
52
+ private var observers : [ Observer ] = [ ]
46
53
47
54
public init ( @DefinitionBuilder build: ( ) -> Definition ) {
48
55
let definition : Definition = build ( )
@@ -52,16 +59,16 @@ open class StateMachine<State: StateMachineHashable, Event: StateMachineHashable
52
59
$0 [ $1. event] = $1. action
53
60
}
54
61
}
55
- observers = definition. callbacks. map { [ unowned self ] in
56
- ( object: { self } , callback: $0)
62
+ observers = definition. callbacks. map {
63
+ Observer ( object: self , callback: $0)
57
64
}
58
65
}
59
66
60
67
@discardableResult
61
68
public func startObserving( _ observer: AnyObject ? , callback: @escaping Transition . Callback ) -> Self {
62
69
guard let observer: AnyObject = observer
63
70
else { return self }
64
- observers. append ( ( object: { [ weak observer] in observer } , callback: callback) )
71
+ observers. append ( Observer ( object: observer, callback: callback) )
65
72
return self
66
73
}
67
74
@@ -71,7 +78,7 @@ open class StateMachine<State: StateMachineHashable, Event: StateMachineHashable
71
78
72
79
public func stopObserving( _ observers: [ AnyObject ? ] ) {
73
80
self . observers. removeAll {
74
- guard let object: AnyObject = $0. object ( )
81
+ guard let object: AnyObject = $0. object
75
82
else { return true }
76
83
return observers. contains { $0 === object }
77
84
}
@@ -104,9 +111,9 @@ open class StateMachine<State: StateMachineHashable, Event: StateMachineHashable
104
111
}
105
112
106
113
private func notify( _ result: Transition . Result ) {
107
- var observers : [ ( object : ( ) -> AnyObject ? , callback : Transition . Callback ) ] = [ ]
114
+ var observers : [ Observer ] = [ ]
108
115
for observer in self . observers {
109
- guard observer. object ( ) != nil
116
+ guard observer. object != nil
110
117
else { continue }
111
118
observers. append ( observer)
112
119
observer. callback ( result)
0 commit comments