7
7
8
8
import Foundation
9
9
10
- final public class Observable < Value> {
10
+ public final class Observable < Value> {
11
11
12
- private struct Observer < Value> {
12
+ struct Observer < Value> {
13
13
weak var observer : AnyObject ?
14
14
let block : ( Value ) -> Void
15
15
}
16
16
17
- // To make observers array Thread Safe
18
- private let queue = DispatchQueue ( label: " ObservableQueue " , attributes: . concurrent)
19
17
private var observers = [ Observer < Value > ] ( )
20
18
21
19
public var value : Value {
@@ -27,23 +25,17 @@ final public class Observable<Value> {
27
25
}
28
26
29
27
public func observe( on observer: AnyObject , observerBlock: @escaping ( Value ) -> Void ) {
30
- queue. async ( flags: . barrier) {
31
- self . observers. append ( Observer ( observer: observer, block: observerBlock) )
32
- DispatchQueue . main. async { observerBlock ( self . value) }
33
- }
28
+ observers. append ( Observer ( observer: observer, block: observerBlock) )
29
+ DispatchQueue . main. async { observerBlock ( self . value) }
34
30
}
35
31
36
32
public func remove( observer: AnyObject ) {
37
- queue. async ( flags: . barrier) {
38
- self . observers = self . observers. filter { $0. observer !== observer }
39
- }
33
+ observers = observers. filter { $0. observer !== observer }
40
34
}
41
35
42
36
private func notifyObservers( ) {
43
- queue. sync ( ) {
44
- for observer in self . observers {
45
- DispatchQueue . main. async { observer. block ( self . value) }
46
- }
37
+ for observer in observers {
38
+ DispatchQueue . main. async { observer. block ( self . value) }
47
39
}
48
40
}
49
41
}
0 commit comments